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
|
readBoolean ()
|
byte
|
readByte ()
|
char
|
readChar ()
|
double
|
readDouble ()
|
float
|
readFloat ()
|
int
|
readInt ()
|
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
|
|
FileWriter
Constructor Summary
|
|
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. |
|
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
|
|
void
|
BufferedReader
int
|
read ()
Reads a single character. |
readLine ()
Reads a line of text. |
|
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
|
|
void
|
close ()
Closes the stream, flushing it first. |
void
|
flush ()
Flushes the stream. |
InputStreamReader
Constructor Summary
|
|
OutputStreamWriter
Constructor Summary
|
|
OutputStreamWriter ( OutputStream out)
Creates an OutputStreamWriter that uses the default character encoding. |
(三)IO 编程的一般流程:
1. 创建基本流
2. 升级基本流到高级流
3. 使用在高级流中的方法作读写操作
4. 关闭流并释放资源
典型例子:
——————————————————————————-
1. 创建 InputStream/Reader
2. 升级到 Buffered
3.使用方法 readLine()
While((str=in.readln())!=null)
4. 关闭流,close()
——————————————————————————
1. 创建 OutputStream/Writer
2. 升级到 PrintWriter
3. 使用方法 println()
4. 关闭流,close()
——————————————————————————
(四)经典的IO代码(需要背诵在心)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
import java.io.*; public class IOProcessSample { public static void main(String[] args) { String str; File file = new File("C:/test.txt"); BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); System.out.println("Press Ctrl+Z to Ended Input"); try { PrintWriter out = new PrintWriter(file); while ((str = in.readLine()) != null) { out.println(str); } in.close(); out.close(); } catch (FileNotFoundException e) { System.err.println("File Not Found" + file); } catch (IOException e) { e.printStackTrace(); } try { in = new BufferedReader(new FileReader(file)); while ((str = in.readLine()) != null) { System.out.println(str); } in.close(); } catch (FileNotFoundException e) { System.err.println("File Not Found" + file); } catch (IOException e) { e.printStackTrace(); } } } |
转载请注明:无名小站 » Java IO Stream 总结