注:此博客部分内容从互联网搜索得到。
Java中的I/O分为字节流和字符流。
1.两者的区别。
字节流:以byte的格式。
字符流:以unicode编码的格式。unicode一般为2个字节。通常为写入内存的格式。
两者属于不同的处理方式。
2.Java中字节流的类。
Java中的输入字节流的类如下图所示:
输出字节流如下图所示:
分析:其中FileInputStream,PipedInputStream, ByteArrayInputStream, SequenceInputStream,StringBufferInputStream,ObjectInputStream表示数据的输入源分别是文件,管道,字节数组,一个由其它种类的流组成的序列,String数组和对象。而FilterInputStream用于控制输入的顺序,包括DataIn/OutStream这样按照指定类型的输出以及BufferedOutputStream这样将数据缓冲到缓冲区等等。
3.Java中字符流的类。
字符流的输入类如下:
字符流的输出类如下:
应该根据具体的场合适用具体的类。
4.用于两者之间转换的类。
InputStreamReader:将输入字节流转换成字符流。
如:InputStreamReaderir = new InputStreamReader(new FileInputStream(“src”));
OutputStreamWriter:将输出字节流转换成字符流。
FileOutputStreamfos =newFileOutputStream("a");
OutputStreamWriterOutputStreamWriter=newOutputStreamWriter(fos);
5.Java I/O的一般使用规则。
一、按数据来源(去向)分类:
1、是文件:FileInputStream,FileOutputStream, ( 字节流)FileReader,FileWriter(字符)
2、是byte[]:ByteArrayInputStream,ByteArrayOutputStream(字节流)
3、是Char[]:CharArrayReader, CharArrayWriter( 字符流)
4、是String:StringBufferInputStream, StringBufferOuputStream ( 字节流)StringReader,StringWriter(字符流)
5、网络数据流:InputStream,OutputStream,(字节流)Reader, Writer( 字符流)
二、按是否格式化输出分:
1、要格式化输出:PrintStream,PrintWriter
三、按是否要缓冲分:
1、要缓冲:BufferedInputStream,BufferedOutputStream,(字节流)BufferedReader, BufferedWriter( 字符流)
四、按数据格式分:
1、二进制格式(只要不能确定是纯文本的):InputStream, OutputStream 及其所有带Stream结束的子类
2、纯文本格式(含纯英文与汉字或其他编码方式);Reader,Writer及其所有带Reader,Writer的子类
五、按输入输出分:
1、输入:Reader,InputStream类型的子类
2、输出:Writer,OutputStream类型的子类
六、特殊需要:
1、从Stream到Reader,Writer的转换类:InputStreamReader,OutputStreamWriter
2、对象输入输出:ObjectInputStream,ObjectOutputStream
3、进程间通信:PipeInputStream,PipeOutputStream, PipeReader, PipeWriter
4、合并输入:SequenceInputStream
5、更特殊的需要:PushbackInputStream,PushbackReader, LineNumberInputStream, LineNumberReader
决定使用哪个类以及它的构造进程的一般准则如下(不考虑特殊需要):
首先,考虑最原始的数据格式是什么:规则四
第二,是输入还是输出:规则五
第三,是否需要转换流:规则六第1点
第四,数据来源(去向)是什么:规则一
第五,是否要缓冲:规则三(特别注明:一定要注意的是readLine()是否有定义,有什么比read,write更特殊的输入或输出方法)
第六,是否要格式化输出:规则二