Java IO Stream 总结
Stream 是在编程语言中对输入输出的总称 (一种比喻的称谓。Stream 为流水,输入输出实际上就是指数据的流动,数据由一个地方运动的另一个地方,就像流水一样,程序员将输入输出比作流水,再恰当不过了。)
流按照其所载内容分类,大致可分为字节流和字符流两大类
字节流 (Byte Stream)
在计算机中,byte是相当于机器语言中的单词,他在Java中统一由InputStream和OutputStream作处理。
字符流(Character Stream)
而在编码体系中,一般采用Char(2 bytes), 他在Java中统一由Reader和Writer作处理。
InputStream, OutputStream, Reader和Writer, 作为在java.io.*包的顶级父类,定义了IO Process中最抽象的处理和规范。对于实际的应用,他们并不适用。于是根据各种实际的需要,由他们派生出来形式各样各具特色的子类。
下表概述了Java IO 常用Classes 的关系:
常用Java IO Classes 关系图
|
Byte
|
InputStream/ OutputStream
|
Node
Byte Stream
|
FileInputstream/ FileOutputStream
|
|
PipeInputStream/
PipeOutputStream
|
|
…
|
|
Processing Byte Stream
|
FilterInputStream/
FilterOutputStream
|
BufferInputStream/
BufferOutputStream
|
DataInputStream/
DataOutputStream
|
PrintStream
|
|
…
|
|
Byte 与 Char 通过 InputstreamReader 和 OutputStreamWriter 来转换
|
Char
|
Reader/Writer
|
Node
Char Stream
|
FileReader/FileWriter
|
|
PipeReader/PipeWriter
|
|
…
|
|
Processing Char Stream
|
|
BufferReader/
BufferWriter
|
PrintWriter
|
|
…
|
|
(一)Stream的分类:
1
Node Stream :基本流,可以从名称中看出他是从哪个地方输入输出的。
1.1
用于文件输入输出流: FileInputStream, FileOutputStream
1.2
用于内存数组的输入输出流:ByteArrayInputStream, ByteArrayOutputStream
1.3
用于字符串的输入输出流:StringArrayInputStream, StringArrayOutputStream
1.4
用于管道的输入输出流:PipedInputStream, PipeOutStream (用于线程间的交互)
….
2
Processing Stream: 处理流,是对Node Stream的加强和补充,可以看作是高级流。 要构造一个高级流通常要以一个基础流为基础(如通过构造函数的参数传入)
2.1
用于提高输入输出效率的缓冲流:BufferedInputStream, BufferedOutputStream
2.2
用于数据转化的数据流: DataInputStream (用于读取Java的Primitive Data Type) , DataOutputStream
2.3
8位转化为16位的流: InputStreamReader, OutputWriter (用于沟通byte 和Char )
2.4
打印流: PintStream
….
(二)几个重要的IO Classes
InputStream
abstract int
(可对应Char)
|
read
() Reads the next byte of data from the input stream
|
int
|
read
(byte[] b) Reads some number of bytes from the input stream and stores them into the buffer array b.
|
void
|
close
() Closes this input stream and releases any system resources associated with the stream. (Stream
用完之后要注意关闭!)
|
OutputStream
abstract void
|
write
(int b) Writes the specified byte to this output stream.
|
void
|
write
(byte[] b) Writes b.length bytes from the specified byte array to this output stream.
|
void
|
close
() Closes this output stream and releases any system resources associated with this stream.
|
void
|
flush
() Flushes this output stream and forces any buffered output bytes to be written out.
(不必等buffer满了再写出,强行把所有的东西都写出来)
|
DataInputStream
能够读出在输入流中读出Java的基本数据类型(primitive data type),常在对输入流格式十分清楚的情况下使用.
boolean
|
|
byte
|
|
char
|
|
double
|
|
float
|
|
int
|
|
DataOutputStream
能够直接写出Java的基本数据类型
void
|
writeBoolean
(boolean v) Writes a boolean to the underlying output stream as a 1-byte value.
|
void
|
writeByte
(int v) Writes out a byte to the underlying output stream as a 1-byte value.
|
void
|
writeDouble
(double v) Converts the double argument to a long using the doubleToLongBits method in class Double, and then writes that long value to the underlying output stream as an 8-byte quantity, high byte first.
|
void
|
writeFloat
(float v) Converts the float argument to an int using the floatToIntBits method in class Float, and then writes that int value to the underlying output stream as a 4-byte quantity, high byte first.
|
void
|
writeInt
(int v) Writes an int to the underlying output stream as four bytes, high byte first.
|
FileReader
Constructor Summary
|
FileReader
(
File
file) Creates a new FileReader, given the File to read from.
| |
FileReader
(
String
fileName) Creates a new FileReader, given the name of the file to read from.
| |
FileWriter
Constructor Summary
|
FileWriter
(
File
file) Constructs a FileWriter object given a File object.
| |
FileWriter
(
File
file, boolean append) Constructs a FileWriter object given a File object.
| |
| |
FileWriter
(
String
fileName, boolean append) Constructs a FileWriter object given a file name with a boolean indicating whether or not to append the data written.
| |
PrintWriter 最好的Writer (提供了我们熟悉的println()方法)
Constructor Summary
|
PrintWriter
(
File
file) Creates a new PrintWriter, without automatic line flushing, with the specified file.
| |
PrintWriter
(
OutputStream
out) Creates a new PrintWriter, without automatic line flushing, from an existing OutputStream.
|
|
PrintWriter
(
Writer
out) Creates a new PrintWriter, without automatic line flushing.
|
|
void
|
println
(boolean x) Prints a boolean value and then terminates the line.
|
void
|
println
(char x) Prints a character and then terminates the line.
|
void
|
println
(double x) Prints a double-precision floating-point number and then terminates the line.
|
void
|
println
(float x) Prints a floating-point number and then terminates the line.
|
void
|
println
(long x) Prints a long integer and then terminates the line.
|
void
|
println
(
Object
x) Prints an Object and then terminates the line.
|
void
|
println
(
String
x) Prints a String and then terminates the line.
|
BufferedReader
int
|
read
() Reads a single character.
|
|
|
void
|
close
() Closes the stream and releases any system resources associated with it.
|
BufferedWriter
void
|
write
(char[] cbuf, int off, int len) Writes a portion of an array of characters.
|
void
|
write
(
String
s, int off, int len) Writes a portion of a String.
|
void
|
close
() Closes the stream, flushing it first.
|
void
|
flush
() Flushes the stream.
|
InputStreamReader
OutputStreamWriter
(三)IO 编程的一般流程:
1.
创建基本流
2.
升级基本流到高级流
3.
使用在高级流中的方法作读写操作
4.
关闭流并释放资源
-------------------------------------------------------------------------------
1. Creat node stream;
2. Upgrade node stream to processing stream if necessary
3. Use the methods in the stream object to read or write
4. Close the stream and release the resource
------------------------------------------------------------------------------
1. Create InputStream/Reader
2. Upgrade to Buffered
3. Use readLine()
While((str=in.readln())!=null)
4. close()
------------------------------------------------------------------------------
1. Create OutputStream/Writer
2. Upgrade to PrintWriter
3. Use println()
4. close()
(四)经典的IO代码(需要背诵在心)