java io流大全_java IO流-学习整理汇总

java IO流

1:概念

java中的流,他的概念源于unix中管道(pipe)的概念,在unix中,管道是一条不间断的字节流,用于实现程序或者进程之间的通信,或者读写外围设备,外围文件等。

2:分类

输入输出流:根据文件流的流向,分为输入流和输出流,

字节流和字符流:针对处理的对象是字符还是字节,分为字符流和字节流,

字节流:一般读入或读出的是8位二进制数据,InputStream是所有字节输入流的祖先,OutPutStream是所有输出流的祖先。

字符流:一般读入或读出的是16位二进制数据,Reader是所有读取字符输入流的祖先,Writer是所有字符输出流的祖先。

结合上面所说的输入输出流,简单分类,

字符流                         字节流

输入流            Reader                    InputStream

输出流            Writer                     OutPutStream

节点流和处理流:节点流是在程序中直接和源文件相连,读入或者读出,处理流就是与节点流一块使用,在节点流的基础上再套上一层,套上的就是处理流

其中需要注意的是在平常操作中如何判断使用字符流还是字节流,字符流一般都是读入或者读出的单位是一个字符,一般遇到中文的就用字符流,因为中文一个字节装不下,如果采用字节流,那么读入的将会是半个中文,操作系统不认识,只能显示问号,遇到其他图片,媒体,视频等就用字节流。通俗点就是遇到中文的就用字符流,其他字节流。

3:详解:

491e1aa0d2c840debbf8f1eeecf10abe.png

上面图是一个简单表关系,是上次从别人那看到不错就粘贴过来了,很形象。下面就java中的字节流和字符流进行简单的介绍:

java 中的字节流:

FileInputStream和FileOutPutStream

他们都是节点流,input流的源端和out的目的端都是磁盘文件,他们的构造方法允许通过文件的路径名来构造相应的流

FileInputStream fis = new FileInputStream("c://123.txt");要注意的是123.txt文件必须存在而且要保证是可读的。

FileOutPutStream fos = new FileOutPutStream("c://345.txt");若输出文件已经存在了,那么必须是可以覆盖的,如果不存在,则会创建。

BufferedInputStream和BufferedOutputStream,他们是带有缓冲区的input和output,他们分别继承了FileInputStream和FileOutPutStream,

java中的字符流:

字符流是主要用来处理字符的,java采用16位的Unicode来表示字符串和字符,对应的字符流的输入和输出分别是Reader和Writer,

其中FileReader和FileWriter分别继承了Reader和Writer,属于节点流

其中InputStreamReader和InputStreamWtirer,他们是处理流,协助节点流进行处理,在构造这两个类的对应流时,他们会自动进行转换,将平台缺省的编码格式设置为Unicode编码格式,对英文环境而言,缺省编码格式为ISO8859-1。

BufferedReader和BufferedWriter两个类对应的流使用了缓冲,能大大提高输入输出的效率。他也是处理流。

其余还有很多对象,那些都是衍生出来的,针对数组,管道和对象操作的这里就没有详谈。

使用规则:

下面简单介绍一下在那种情况下使用那种流

1:根据文件:

文件:FileInputStream,FileOutPutStream(字节流),FileReader,FileWriter(字符流,带中文)

byte[]:ByteArrayInputStream,ByteArrayOutPutStream(字节流)

char[]:CharArrayReader,CharArrayWriter(字符流)

String:StringBufferInputStream,StringBufferOutPutStream(字节流),StringWriter,StringReader(字符流)

网络数据流:InputStream,OutPutStream(字符流),Reader,Writer(字符流)

2:按是否格式化输出区分:

要格式化输出:PrintStream,PrintWriter

3:按是否缓存区分:

BufferedInputStream,BufferedOutPutStream(字节流),BufferedReader,BufferWriter(字符流)

4:按照数据格式区分

二进制格式(只要不能确定是纯文本格式的)InputStream,OutPutStream以及Stream的子类

纯文本格式(含英文以及中文或者其他编码格式)Reader,Wrtiter以及Reader,Writer的子类

5:输入输出区分

输入流:Reader,InputStream的子类

输出流:Writer,OutPutStream的子类

6:特殊需求区分:

从stream到Reader,Writer的转换类:InputStreamReader,OutPutStreamReader

对象输入输出:ObjectInputStream,ObjectOutPutStream

进程之间通信:PipeInputStream,PipeOutPutStream,PipeWriter,PipeReader

序列化的:SequenceInputStream

决定选取那种类以及他的构造进程规则一般如下:

首先考虑原始数据格式

其次考虑是输入还是输出

在这考虑是否需要转换流

还要考虑数据去向

考虑是否需要缓冲

以上只是我自己结合网上的一些整理的,如果有什么不妥或者错误的地方,敬请指出,谢谢。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值