快速业务通道

浅谈Java的输入输出流 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-23

浅谈Java的输入输出流

时间:2010-12-13

Java语言的输入输出功能是十分强大而灵活的,美中不足的是看上去输入输出的代码并不是很简洁,因为你往往需要包装许多不同的对象。在Java类库中,IO部分的内容是很庞大的,因为它涉及的领域很广泛:标准输入输出,文件的操作,网络上的数据流,字符串流,对象流,zip文件流....本文的目的是为大家做一个简要的介绍。

流是一个很形象的概念,当程序需要读取数据的时候,就会开启一个通向数据源的流,这个数据源可以是文件,内存,或是网络连接。类似的,当程序需要写入数据的时候,就会开启一个通向目的地的流。这时候你就可以想象数据好像在这其中“流”动一样,如下图:

浅谈Java的输入输出流 - 编程入门网 浅谈Java的输入输出流 - 编程入门网

Java中的流分为两种,一种是字节流,另一种是字符流,分别由四个抽象类来表示 (每种流包括输入和输出两种所以一共四个):InputStream,OutputStream,Reader,Writer。Java中其他多种多样变化的流均是由它们派生出来的:

浅谈Java的输入输出流 - 编程入门网 浅谈Java的输入输出流 - 编程入门网 浅谈Java的输入输出流 - 编程入门网 浅谈Java的输入输出流 - 编程入门网

浅谈Java的输入输出流(2)

时间:2010-12-13

在这其中InputStream和OutputStream在早期的Java版本中就已经存在了,它们是基于字节流的,而基于字符流的Reader和Writer是后来加入作为补充的。以上的层次图是Java类库中的一个基本的层次体系。

在这四个抽象类中,InputStream和Reader定义了完全相同的接口:

int read () int read (char cbuf[]) int read (char cbuf[], int offset, int length)

而OutputStream和Writer也是如此:

int write (int c) int write (char cbuf[]) int write (char cbuf[], int offset, int length)

这六个方法都是最基本的,read ()和write ()通过方法的重载来读写一个字节,或者一个字节数组。

更多灵活多变的功能是由它们的子类来扩充完成的。知道了Java输入输出的基本层次结构以后,本文在这里想给大家一些以后可以反复应用例子,对于所有子类的细节及其功能并不详细讨论。

import java.io.*;    public class IOStreamDemo {     public void samples () throws IOException {    //1. 这是从键盘读入一行数据,返回的是一个字符串       BufferedReader stdin =new BufferedReader (new InputStreamReader (System.in));       System.out.print ("Enter a line:");       System.out.println (stdin.readLine ());    //2. 这是从文件中逐行读入数据    BufferedReader in = new BufferedReader (new FileReader ("IOStreamDemo.java"));       String s, s2 = new String ();       while ( (s = in.readLine ())!= null)             s2 += s + "\n";       in.close ();    //3. 这是从一个字符串中逐个读入字节       StringReader in1 = new StringReader (s2);       int c;       while ( (c = in1.read ()) != -1)             System.out.print ( (char)c);    //4. 这是将一个字符串写入文件       try {             BufferedReader in2 = new BufferedReader (new StringReader (s2));             PrintWriter out1 = new PrintWriter (new BufferedWriter (new FileWriter ("IODemo.out")));             int lineCount = 1;             while ( (s = in2.readLine ()) != null )                  out1.println (lineCount++ + ": " + s);             out1.close ();       } catch (EOFException e) {             System.err.println ("End of stream

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号