您的位置:首页 > 编程语言 > Java开发

Java IO Stream 总结

2010-08-04 10:38 246 查看

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

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

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)

          Constructs a FileWriter object given a file name.

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-divcision 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.

 
String

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

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

 
Constructor Summary

InputStreamReader

(
InputStream

 in)

          Creates an InputStreamReader that uses the default charset.

 
 
OutputStreamWriter

 
Constructor Summary

OutputStreamWriter

(
OutputStream

 out)

          Creates an OutputStreamWriter that uses the default character encoding.

 
 

(三)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代码(需要背诵在心)


 



import
 java.io.
*
;





/**/
/*



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()



*/





public
 
class
 IOProcessSample
...
{







 
public
 
static
 
void
 main(String[] args) 
...
{



  
//
Create a file based on the first command-line argument to the program



  File file
=
 
new
 File(args[
0
]);



  
//
Create buffered reader from the standard input



  BufferedReader in
=
new
 BufferedReader(
new
 InputStreamReader(System.in));



    



  System.out.println(
"
Press ctr-d or ctr-z to end
"
);



  String str;





  
try
...
{



   
//
Create a print write to write on a file



   
//
PrintWriter is required to handled the IO exception



   PrintWriter out
=
 
new
 PrintWriter(file);



   
//
Read from the standard input and write to the file





   
while
((str
=
in.readLine())
!=
null
)
...
{



    out.println(str);



   }



   
//
close the stream and release the resource



   in.close();



   out.close();



  }





  
catch
(FileNotFoundException e)
...
{



   System.err.println(
"
File not found in part 1 : 
"
+
file);



  }





  
catch
 (IOException e)
...
{



   e.printStackTrace();



  }





  
finally
...
{



   System.out.println(
"
-----------Part1 is ended-----------------------
"
);



  }



  
//////////////////////////////////////////////////////////////////////////////





  
try
...
{



   
//
Create a buffer reader from a file



   in
=
new
 BufferedReader(
new
 FileReader(file));



   
//
Read the file and print the content on the screen.





   
while
((str
=
in.readLine())
!=
null
)
...
{



    System.out.println(str);



   }



   
//
close the stream and release the resource



   in.close();



  }





  
catch
 (FileNotFoundException e)
...
{



   System.err.println(
"
File not found in part 2: 
"
+
file);



  }





  
catch
 (IOException e)
...
{



   e.printStackTrace();



  }





  
finally
...
{



   System.out.println(
"
----------------------The End -------------------------
"
);



  }



 }



}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息