Java/IO
来源:互联网 发布:js prototype 继承 编辑:程序博客网 时间:2024/06/10 07:48
字节流
System.in
InputStream
流到程序,从流中read到数组
FileInputStream
FileterInputStream
BufferedInputStream
DataInputStream
PushBackInputStream
LineNumberInputStream
ObjectInputStream
PipedInputStream[Thread]
ByteArrayInputStream
StringBufferInputStream(deprecated)
SequenceInputStream
OutputStream
流出程序,从数组中write到流
FileOutputStream
FileterOutputStream
BufferedOutputStream
DataOutputStream
PrintStream
System.out,System.err
ObjectOutputStream
PipedOutputStream
ByteArrayOutputStream
字符流
U
n
i
c
o
d
e
Reader
BufferedReader
LineNumberReader
FilterReader
PushbackReader
InputStreamReader
FileReader
StringReader
PipedReader
CharArrayReader
Writer
BufferedWriter
FilterWriter
OutPutStreamWriter
FileWriter
StringWriter
黑色为abstract类,绿色无对应,用过滤流来包装节点流
1.无论何时使用readLine(),都不应该使用DataInputStream,而应该使用BufferedReader。除了这一点,DataInputStream仍是I/O类库的首先。
2.字节流和字符流的转换:
字节流——字符流:InputStreamReader;
字符流——字节流:OutputStreamWriter;字符流中获取char[],转为string;调用string.getBytes()获取到byte[];通过ByteArrayInputStream和ByteArrayOutputStream得到字节流。
3.StringBufferInputStream、SequenceInputStream、PushBackInputStream,LineNumberInputStream没有对应输出流。
4.过滤流(装饰器):FilterInputStream及其子类;BufferedReader及其子类、FilterReader及其子类。对应的输出流也是。
5.字节流在操作的时候本身是不会用到缓冲区(内存)的,是与文件本身直接操作的,而字符流在操作的时候是使用到缓冲区的。字节流在操作文件时,即使不关闭资源(close方法),文件也能输出,但是如果字符流不使用close方法的话,则不会输出任何内容,说明字符流用的是缓冲区,并且可以使用flush方法强制进行刷新缓冲区,这时才能在不close的情况下输出内容
6. public int read(byte[] b,int off,int len)throws IOException
Parameters:
b
- thebuffer into which the data is read.
off
- thestart offset in arrayb
atwhich the data is written.
len
- the maximum number of bytes to read.
Returns:
the total number of bytes read into the buffer, or-1
ifthere is no more data because the end of the stream has been reached.
7. ByteArrayOutputStream一般不用装饰,装饰类中没有其方法。
java IO 的一般使用原则 :
一、按数据来源(去向)分类:
1.是文件: FileInputStream,FileOutputStream; FileReader, FileWriter
2.是byte[] : ByteArrayInputStream, ByteArrayOutputStream
3.是Char[]: CharArrayReader, CharArrayWriter
4.是String: StringReader,StringWriter
5.网络数据流: InputStream, OutputStream; Reader, Writer
二、按是否格式化输出分:
PrintStream, PrintWriter
三、按是否要缓冲分:
BufferedInputStream, BufferedOutputStream;
BufferedReader, BufferedWriter
四、按数据格式分:
只要是处理纯文本数据,就优先考虑使用字符流。 除此之外都使用字节流
五、按输入输出分:
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 更特殊的输入或输出方法)
- 【Java-IO】IO入门
- Java IO:IO框架
- 【IO】java IO 总结
- java IO
- IO.java
- JAVA IO
- JAVA IO
- java IO
- java io
- JAVA IO
- java IO
- java IO
- java io
- java io
- java io
- java IO
- java IO
- java io
- 第五章作业
- 工作问题积累(十二)error C2668: “pow”: 对重载函数的调用不明确
- 基于DOS的多任务系统的实现_杭电_2014
- ListView 编程: Adapter 何方神圣?
- java正则表达式特殊字符
- Java/IO
- UnicodeDecodeError: 'ascii' codec can't decode byte 0xb2 in position 0: ordinal not in range的解决办法
- mysql导入CSV文件及JAVA读取CSV文件和MYSQL批量插入和更新及ibatis常用SQL语句
- iOS的相对路径和绝对路径
- Activity-Spinner
- div的变宽和变高 _复杂版
- 一些日常忽略的细节程序设置
- Android开源项目第五篇——优秀个人和团体篇
- 一次买卖问题(single sell profit)