IO概述:
 
IO流用来处理设备之间的数据传输
java对数据的操作是通过流的方式
java用于操作流的对象都在IO包中
流按操作数据分为两种:字节流与字符流(编码表)
流按流向分为:输入流,输出流
 
IO流常用基类
 
java.io包中的流的基本操作主要有:字节流和字符流
 
字节流的抽象基类:
 
InputStream: 进入程序的流
OutputStream:流出程序的流
 
在字节流中输出数据主要使用OutputStream类完成,输入使用的是InputStream类;
 
字符流的抽象基类:
 
Reader:
Writer:
 
在字符流中输出主要是使用Writer类完成,输入主要使用Reader类完成;
 
注:有这四个类派生出来的子类名称都是以期父类名作为子类名的后缀;
如:父类:InputStream -----   子类:FileInputStream
如:父类:Reader      ------  子类:FileReader
 
在java中IO操作主要的操作流程如下:
 
1:使用File类打开一个文件
2:通过字节流或字符流的子类指定要输出的位置;
3:进行读/写操作
4:关闭输入/输出
 
详解字节流--(OutputStream)
 
字节流主要操作byte类型的数据,主要操作类是OutputStream类和InputStream类;
1:字节输出流
根据API文档介绍:
public abstract class OutputStream extends Object implements Closeable, Flushable
发现OutputStream类属于抽象类,要想使用此类,则必须使用子类实例化对象;
 
2:OutputStream类中的常用方法:
将一个字节数据写入数据流:
public abstract void write(int b)throws IOException
将一个byte数组写入数据流:
public void write(byte[] b)throws IOException
将一个指定范围的byte数组写入数据流:
public void write(byte[] b,int off,int len)throws IOException
刷新缓存区:
public void flush()throws IOException
关闭数据流:
public void close()throws IOException
 
3:使用FileOutputStream子类的构造方法:
public FileOutputStream(File file)throws FileNotFoundException
操作时必须接收File类的实例,指明要输出的文件路径;
 
实例01:
需求:向文件中写入字符串
//public byte[] getBytes():使用平台的默认字符集将此 String 编码为 byte 序列,并将结果存储到一个新的 byte 数组中; package cn.itcast03; /*
* 将一个字节数据写入数据流:
* public abstract void write( int b)throws IOException
* 将一个byte数组写入数据流:
* public void write(byte[] b)throws IOException
* 将一个指定范围的byte数组写入数据流:
* public void write(byte[] b, int off,int len)throws IOException
* 刷新缓存区:
* public void flush()throws IOException
* 关闭数据流:
* public void close()throws IOException
*/ import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream; public class FileOutputStream01 {
public static void main(String[] args) throws IOException {
//声明File对象
File f = new File("a.txt" ); //通过子类实例化父类对象
OutputStream out = new FileOutputStream(f); //进行写操作 String s = "I love JAVA"; byte[] bytes = s.getBytes(); //将一个byte数组写入数据流:
out.write(bytes); //将一个指定范围的byte数组写入数据流:
out.write(bytes,1,5); //将一个字节数据写入数据流
out.write( 'b');
out.close();
}
} 实例02:
package cn.itcast03; import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException; //追加新的内容
//public FileOutputStream(String name,boolean append)throws FileNotFoundException
//如果将append的值设置为true,则表示在文件的末尾追加内容; public class FileOutStream03 {
public static void main(String[] args) throws IOException { File file = new File("b.txt" ); FileOutputStream fos = new FileOutputStream(file,true ); String s = "Hello World";
byte[] bytes = s.getBytes();
for (int i = 0; i < bytes.length; i++) {
fos.write(bytes[i]);
}
fos.close(); } }

  

详解字节流--(InputStream)
 
查看API文档:
public abstract class InputStream extends Object implements Closeable
 
InputStream类的常用方法:
 
取得出入文件的大小:
public int available()throws IOException
关闭输入流:
public void close()throws IOException
读取一个字节内容,以数字的方式读取(从输入流中读取数据的下一个字节。返回 0255 范围内的 int 字节值。如果因为已经到达流末尾而没有可用的字节,则返回值 -1
public abstract int read()throws IOException
将内容读到byte数组中,同时返回读入的个数
public int read(byte[] b)throws IOException
实例01:
package cn.itcast04;
/*
* public abstract int read()throws IOException
* public int read(byte[] b)throws IOException
*/ import java.io.File;
import java.io.FileInputStream;
import java.io.IOException; public class FileInputStreamDemo01 {
public static void main(String[] args) throws IOException {
/*
// File f = new File("G:"+File.separator+"JavaTest"+File.separator+"test01.txt ");
File f = new File("a.txt");
FileInputStream fis = new FileInputStream(f); int b;
while ((b=fis.read())!=-1) {
System.out.println((char)b);
}
fis.close();
*/
System. out.println("==============================================" );
File f = new File("a.txt" );
FileInputStream fis2 = new FileInputStream(f);
/*
//将所有内容读取到数组中
byte[] bytes =new byte[1024];
//用于记录本次读取字节的个数
fis2.read(bytes);
fis2.close();
System.out.println(new String(bytes));
出现的问题:数组长度是1024,但是读取的数组长度只有17字节,所以会有1007个无用的空间转为字符串;
修正错误如下:
*/
/*
*
byte[] bytes = new byte[1024];
int len ;
while(( len=fis2.read(bytes))!=-1)
{
String s = new String(bytes,0, len);
System.out.println(s);
}
fis2.close();
出现的问题:以上虽然指定了byte数组的范文,但是程序依然开辟了很多的无用的空间,以上的程序没有从根本上解决问题。
解决方法:使用File提供的length()方法来取得文件的大小
*/
byte[] bytes = new byte[( int)f.length()];
int len;
//如果len的值不是-1,表示文件没有读完;
while((len=fis2.read(bytes))!=-1)
{
String s = new String(bytes,0,len);
System. out.println(s);
}
fis2.close();
}
}

  

JavaIO(03)字节流--OutputStream and InputStream的更多相关文章

  1. java中outputStream与inputStream的相互转换

    package com.boco.test; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; im ...

  2. java中如何将OutputStream转换为InputStream

    在不需要文件生成的情况下,直接将输出流转换成输入流.可使用下面的三种方法: 如果你曾经使用java IO编程,你会很快碰到这种情况,某个类在OutputStream上创建数据而你需要将它发送给某个需要 ...

  3. [19/03/30-星期六] IO技术_四大抽象类_ 字节流( 字节输入流 InputStream 、字符输出流 OutputStream )_(含字节文件缓冲流)

    一.概念及分类 InputStream(输入流)/OutputStream(输出流)是所有字节输入输出流的父类 [注]输入流和输出流的是按程序运行所在的内存的角度划分的 字节流操作的数据单元是8的字节 ...

  4. 字节流与字符流简单操作(OutputStream、InputStream、Writer、Reader)

    操作流程 使用File类打开一个文件 通过字节流或者字符流的子类.指定输出的位置. 进行读/写操作 关闭输入/出 字节流与字符流 在java.io包中操作文件内容主要有两大类:字节流字符流.两大类分为 ...

  5. java:OutputStream和InputStream 输出输入流,FileOutputStream,FileInputStream写入读取流

    1.在java中stream代表一种数据流(源),javaio的底层数据元,---(想像成水龙头)2.任何有能力产生数据流(源)的javaio对象就可以看作是一个InputStream对象既然它能产生 ...

  6. java IO文件读写例子(OutputStream,InputStream,Writer,Reader)

    一,File创建文件 File file = new File("D:" + File.separator + "yi.txt"); 代码示例: package ...

  7. java-IO流-字节流-概述及分类、FileInputStream、FileOutputStream、available()方法、定义小数组、BufferedInputStream、BufferedOutputStream、flush和close方法的区别、流的标准处理异常代码

    1.IO流概述及其分类 * 1.概念      * IO流用来处理设备之间的数据传输      * Java对数据的操作是通过流的方式      * Java用于操作流的类都在IO包中      *  ...

  8. OutputStream和InputStream的区别 + 实现java序列化

    我们所说的流,都是针对内存说的,比如为什么打印到屏幕上就是System.out.println();而从屏幕等待用户输入的却是System.in呢?因为对于内存来说,把字符串打印到屏幕上是从内存流向屏 ...

  9. Java使用基本字节流OutputStream的四种方式对于数据复制(文本,音视频,图像等数据)

    //package 字符缓冲流bufferreaderDemo; import java.io.BufferedOutputStream; import java.io.FileInputStream ...

随机推荐

  1. Unique Encryption Keys (思维题 预处理)

    题目 题意:给m个数字, q次询问, 询问b到e之间如果有重复数字就输出, 没有就输出OK 思路:用f[i]数组 记录从i开始向后最近的有重复数字的 位置, 如 1 3 2 2, 则f[1] = 4; ...

  2. Android安卓开发中图片缩放讲解

    安卓开发中应用到图片的处理时候,我们通常会怎么缩放操作呢,来看下面的两种做法: 方法1:按固定比例进行缩放 在开发一些软件,如新闻客户端,很多时候要显示图片的缩略图,由于手机屏幕限制,一般情况下,我们 ...

  3. UVa 10601 (Polya计数 等价类计数) Cubes

    用6种颜色去染正方体的12条棱,但是每种颜色都都限制了使用次数. 要确定正方体的每一条棱,可以先选择6个面之一作为顶面,然后剩下的四个面选一个作为前面,共有24种. 所以正方体的置换群共有24个置换. ...

  4. UVa 11077 (循环分解 递推) Find the Permutations

    把{1, 2, 3,,, n}叫做自然排列 本题便是求有多少个n元排列P要至少经过k次交换才能变为自然排列. 首先将排列P看做置换,然后将其分解循环,对于每个长度为i的循环至少要交换i-1次才能归位. ...

  5. 在win7系统下使用TortoiseGit(乌龟git)简单操作Git@OSC

    非常感谢OSC提供了这么好的一个国内的免费的git托管平台.这里简单说下TortoiseGit操作的流程.很傻瓜了 首先你要准备两个软件,分别是msysgit和tortoisegit,乌龟还可以在下载 ...

  6. wdcp系统升级mysql5.7.11

    1.下载解压 下载地址为:http://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.12-linux-glibc2.5-x86_64.tar.gz ...

  7. Android启动activity的4种模式(standard、singleTop、singleTask、singleINstance)

    在AndroidManifest.xml中配置activity时,android:launchMode属性会指定启动activity的模式,有四种: standard singleTop single ...

  8. hdu 1175(广搜)

    题意:容易理解... 思路:我开始的思路不好实现,而且有漏洞,时间复杂度也高,后来在网上学了下别人的方法,真心感觉很牛B,不仅代码好实现,而且时间复杂度比较低,具体看代码实现吧!! 代码实现: #in ...

  9. C#中嵌入互操作类型的含义

    首先说一下它的含义: 1. ”嵌入互操作类型”中的嵌入就是引进.导入的意思,类似于c#中using,c中include的作用,目的是告诉编译器是否要把互操作类型引入. 2. “互操作类型”实际是指一系 ...

  10. Android UI开发详解之Fragment

    Fragment是Android自从3.0之后新加入的一个组件,我相信很多人都已经听说过这个组件了,但这个组件到底是个什么,如何去使用他呢,且听我讲来. 以下部分资料来自官网(官网才是王道,其他都是浮 ...