码迷,mamicode.com
首页 > 其他好文 > 详细

IO流系统总结

时间:2018-11-04 21:10:22      阅读:132      评论:0      收藏:0      [点我收藏+]

标签:转换   通过   leo   文本   显示   ali   在服务器   int   foo   

一.描述如下流的基本作用:

  文件字节流、文件字符流、缓冲字节流、缓冲字符流字节数组流、数据流、转换流、对象流

1.文件字节流:

FileInPutStream

FileOutPutStream

是一种节点流,直接面向数据,中间没有其他流介入数据。文件之间的数据通过字节的方式操作。

基本的字节流,对于字节的操作是底层操作,是文件之间数据的直接操作。

FileInPutStream用到的方法是:read()

用于读取某个文件,在使用的时候格式为

FileInPutStream fis = new FileInputStream(“D://test.txt”);

fis.read();

fis.read(byte[],0,length);

这样我们就读取到了文件数据,但是fis.read()是一个字节,并不是我们人类识别的字符

FileOutPutStream fos = new FileOutPutStream("D://test.txt");

fos.write();

或者

fos.write(byte[], 0 ,length);

一般在使用的时候是这样的:

首先创建一个数组用来接收fis.read()读取的数据

byte[] buf = new byte[1024];//任意数字

fis.read(buf);//返回一个int类型的数字,用来记录每次读取了多大的数据

int i = fis.read(buf);//这样我们就完成了一次1024大小的数据获取 , i = 1024 是我们读取到的数据;

如果我们读取完毕,那么i = fis.read(buf);这个整体将会返回一个-1;(因为文件当中的数据已经被全部拿走了所以i的赋值结果为-1)

接下来我们使用while循环 就可以拿到文件中所有的数据了;

这个时候我们读取的文件存入buf,如果需要输出的让我们看到的话,可以使用new String(buf,0,i)来完成显示读取的文件

如果是read()这样的读取的话,是一个字节一个字节读取,直接赋值打印就能看到

我们来写入的时候需要:

write();

将需要带入的数据放在括号即可。

但是需要注意的是括号中的int类型的数据将自动转换为char

当然也可以放入数组,在数组将数组当中的数据getByte为数据放在数组当中写入文件

2.文件字符流:FileReader,FileWrite,是一种节点流。

直接可以面向文件进行字符间的操作。

基本操作为read以及write方法

但是要注意,读取的信息为int,原因是底层使用的InPutStreamRead,如果需要查看读取的数据,那么需要转为char类型。

所以要使用cahr类型的数组进行数据的快捷交换。

write需要注意的就是要close或者flush刷新内存/

3.缓冲字节流:将文件字节流中中转站添加缓冲区(8192),提高数据的传输效率。

BufferedInputStream;

read

底层是FileInPutStream,在数据的流传过程中添加了8192大小的byte类型数组

BufferedOutputStream;

write

底层是FileOutPutStream

4.缓冲字符流:用于文件之间字符的流转.对于可以理解为FileRead的一个包装提高了效率

BufferedReader,

readLine()

可以进行整行的文件读取,

BufferedWrite,

write()

newLine()

进行换行。

这里我们直接创建一个String类的获取readLine拿到的整行字符,然后进行write写入即可

使用while循环,条件为读取完毕返回的null

纯文本之间的字符操作应优先考虑缓冲字符流提高效率。

5.字节数组流:一种通过字节方式数据流转方式,是一种节点流,具体操作方式为将其他类型数据通过字节数组的方式流转数据。默认32为数组进行数据写入。

ByteArrayInputStream;

ByteArrayOutputStream; (32位数组

6.数据流:

一种处理流,包裹缓冲流BufferedInputStream,BufferedOutputStream,而缓冲类包裹了InputStream,OutputStream

将字节数据处理为一种可以对接的类型如String,int等,方便了数据的处理,一般我们在服务器和主机之间常常使用

DataInputStream;

DataOutputStream;

提取和写入的顺序需要一致。

理想状态为包装缓冲流,在Close的时候关闭最外层的流,即数据流即可。

7.转换流:将字节转换为字符

InputStreamReader 的作用是把 InputStream 转换成 Reader ,OutputStreamWriter 的作用是把 OutputStream 转换成 Writer

这里需要注意的是。在转换为字符的时候,需要确定字符集。

8.对象流:将数据转换为对象的形式进行读写的方式。

ObjectOutputStream;(序列化

ObjectInputStream; (反序列化

transient 和static修饰的变量无法保存。

serialVersionUID版本号需要在对于该对象的类进行声明,否则会导致反序列化失败提示NotSerializableException。

[注解:这里需要知道的是,如果某个流需要带入一个其他流来进行实现的话,那么这个流必然是处理流。]  
[处理流需要处理的数据,一般是:]  
[转换格式]  
[InPutStream -->; InPutStreamRead]  
[提高效率]  
[InputStream -->BufferedInPutStream]  

IO流系统总结

标签:转换   通过   leo   文本   显示   ali   在服务器   int   foo   

原文地址:https://www.cnblogs.com/Gavinsong/p/9905311.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!