java温故而知新(6)深入理解IOStream

王朝学院·作者佚名  2016-08-27
窄屏简体版  字體: 小  |  中  |  大  |  超大  

一、什么是IO StreamStream 是在编程语言中对输入输出的总称 (一种比喻的称谓。Stream 为流水,输入输出实际上就是指数据的流动,数据由一个地方运动的另一个地方,就像流水一样,程序员将输入输出比作流水,再恰当不过了)。

流按照其所载内容分类,大致可分为字节流和字符流两大类。

1、字节流 (Byte Stream)

在计算机中,byte是相当于机器语言中的单词,他在java中统一由InputStream和OutputStream作处理。

2、字符流(Character Stream)

而在编码体系中,一般采用Char(2 bytes), 他在Java中统一由Reader和Writer作处理。

InputStream, OutputStream, Reader和Writer, 作为在java.io.*包的顶级父类,定义了IOPRocess中最抽象的处理和规范。对于实际的应用,他们并不适用。于是根据各种实际的需要,由他们派生出来形式各样各具特色的子类。

二、IO 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 编程的一般流程

1. 创建基本流

2. 升级基本流到高级流

3. 使用在高级流中的方法作读写操作

4. 关闭流并释放资源

-------------------------------------------------------------------------------

1. Creat node stream;2. Upgrade node stream to processing streamifnecessary3. Use the methods in the stream object to read or write4. Close the stream and release the resource------------------------------------------------------------------------------

1. Create InputStream/Reader2. Upgrade to Buffered3. Use readLine()

While((str=in.readln())!=null)4. close()------------------------------------------------------------------------------

1. Create OutputStream/Writer2. Upgrade to PrintWriter3. Use println()4. close()

四、经典IO实例importjava.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()*/publicclassIOProcessSample{publicstaticvoidmain(String[] args) {//Create a file based on the first command-line argument to the programFile file=newFile(args[0]);//Create buffered reader from the standard inputBufferedReader in=newBufferedReader(newInputStreamReader(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 exceptionPrintWriter out=newPrintWriter(file);//Read from the standard input and write to the filewhile((str=in.readLine())!=null){

out.println(str);

}//close the stream and release the resourcein.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 filein=newBufferedReader(newFileReader(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 resourcein.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 -------------------------");

}

}

}

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航