Java_IO流(Stream)

IO流(Stream)


流是一套API,提供了各种数据类型读写的API
同时流是一套可扩展的API


流是从两个抽象类扩展出来的

  • InputStream输入流
    -reader
  • OutputStream输出流
    -writer
    输入流与输出流的参照是Java处理程序

RandomAccessFile与IO流均可以实现文件的读取与写入,但是现实中更多的使用IO流来进行文件的操作

缓冲流必须依赖与节点流

bos的写出方法将数据写到缓冲区
当缓冲区满时写到文件中
bos流先检查缓冲区是否有数据,如果有数据,将数据写到文件中,再关闭流
flush方法作用,检查缓冲区中是否有文件,如果有数据,将数据强制写入到文件中

##节点流
从特定的数据源开始读写数据,只提供最基本byte读写方法,功能简单
##过滤流
必须依赖低级流(包含节点流),过、过滤流不能单独工作,在低级流的基础上扩展了丰富的数据类型的续写功能,功能复杂,读写简单

节点流:文件流是节点流,以文件为数据源读写数据,只提供简单的byte读写功能,很少直接使用
字节流:InputStream,OutputStream,FileInputStream,FileOutputStream

过滤流是高级流,不能单独工作,必须依赖于低级流(低级流作为构造参数),提供了自动化的缓冲区管理,是缓冲流可以提高软件的IO性能。不会改变原有的软件逻辑。在读写文件时,加入缓冲流提高性能。

代码:  
FileInputStream fis = new FileInputStream("movis.flv");  
FileOutputStream fos = new FileOUtputStream("copy.flv");  
BufferedInputStream bis = new BufferedInputStream(fis);  
BufferedOutputStream bos = new BufferedOutputStream(fos);
int b;  
while((b = bis.read()) != -1){
	bos.write(b);
} 
bis.close();
bos.close();
fis.close();
fos.close();  

对象流

对象流是高级流,不能单独工作,必须依赖低级流
低级流为构造器参数),对象流提供了对对象的序列化合反序列化功能
可以将对象序列化为byte数据,反之则将byte数据反序列化为对象
对象的序列化,只序列化对象的属性,并不对方法进行序列化,方法存储在方法区

transient

对象流要求:

  • 被序列化的对象实现Serializable接口,这个接口并没有必须实现的方法,
  • Java编译器讲对象序列化,讲内存上的对象存储到硬盘上,实现对象的持久化
  • 对对象进行序列化之后,序列化后的是对象可以再网络上传输,
  • 同时要想将硬盘中的对象进行使用必须对其进行反序列化
  • java几乎所有的API都实现了序列化接口

对象输出流

  • 对象输出流必须依赖低级流(FileOutputStream)

字符流(高级流)

字符流是高级流,必须依赖低级的byte流,
字符流封装了字符的编码和解码功能,能够将字符数据转换为byte数据进行传输
字符流可以极大地简化文件内容操作时文件的传输

Reader和Writer
是抽象类,定义了字符的读写方法,所有的字符流都继承自Reader和Writer


转换流

是高级流,必须依赖与低级的byte流,字符转换流继承于Reader和Writer
封装了字符编码的处理算法,简化字符数据的读写方法
InputStreamReader和OutputStreamWriter

  • InputStreamReader
    使用流可以设置字符集
  • OutputStreamWriter

将文本输出到文件中

PrintWriter out = new PrintWriter(new   
OutputStreamWriter(new FileOutputStream("test.txt")));  
out.println();
out.close();

可以简化为:  
PrintWriter out = new PrintWriter("test.txt");

注意:使用字符流的时候最好指定字符编码!
文件打开时最好套用缓冲流


利用BufferedReader读取文本文件

FileInputStream fis = new FileInputStream("test.txt");
InputStreamReader isr = new InputStreamRead(fis);
BufferedReader br = new BufferedReader(isr);
String str;
//每次从文件中读取一行文本,如果返回null表示文件读取到了文件的末尾
while((str = br.readLine()) != null){
	System.out.println(str);
	
}
  • PrintWriter 用于写出文本文件
  • BufferedReader 用于读取文本文件
    这两个都是高级流,都必须依赖低级的byte流
    提供按行读写文本文件的方法,使其极其方便的读写文件

你可能感兴趣的:(技术小白,笔记记录)