转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 软件开发 >> JAVA开发 >> 正文
浅谈Java的输入输出流         ★★★★

浅谈Java的输入输出流

作者:闵涛 文章来源:闵涛的学习笔记 点击数:1424 更新时间:2009/4/22 23:27:43
  Java语言的输入输出功能是十分强大而灵活的,美中不足的是看上去输入输出的代码并不是很简洁,因为你往往需要包装许多不同的对象。在Java类库中,IO部分的内容是很庞大的,因为它涉及的领域很广泛:标准输入输出,文件的操作,网络上的数据流,字符串流,对象流,zip文件流....本文的目的是为大家做一个简要的介绍。

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

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



  在这其中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");
               }
          }

    }

  对于上面的例子,需要说明的有以下几点:

  1. BufferedReaderReader的一个子类,它具有缓冲的作用,避免了频繁的从物理设备中读取信息。它有以下两个构造函数:

BufferedReaderReader in)
BufferedReaderReader in, int sz)

  这里的sz是指定缓冲区的大小。

  它的基本方法:

void close(//关闭流

           void mark(int readAheadLimit) //标记当前位置

           boolean markSupported() //是否支持标记

           int read() //继承自Reader的基本方法

           int read(char[] cbuf, int off, int len) //继承自Reader的基本方法

           String readLine() //读取一行内容并以字符串形式返回

           boolean ready() //判断流是否已经做好读入的准备

           void reset() //重设到最近的一个标记

           long skip(long n) //跳过指定个数的字符读取

  2. InputStreamReaderInputStreamReader之间的桥梁,由于System.in是字节流,需要用它来包装之后变为字符流供给             BufferedReader使用。

  3. PrintWriter out1 = new PrintWriter(new BufferedWriter(new FileWriter("IODemo.out")));

  这句话体现了Java输入输出系统

[1] [2]  下一页


[网页制作]JavaScript的三种消息框:警告框、确认框、提示框  [网页制作]JavaScript运算符介绍
[网页制作]JavaScript比较和逻辑运算符介绍  [网页制作]script中的language=javascript和type=text/javas…
[JAVA开发]Java连接各种数据库的实例  [办公软件]浅谈Linux 下Java 1.5 汉字方块问题解决方法
[系统软件]Regular Expression 正则表达式-2 (Java)  [C语言系列]sqlserver在JAVA中的应用
[网页制作]Dreamweaver MX实例:构建Java插入模块  [网页制作]使用Dreamweaver轻松构建Java插入模块
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · C语言系列  · VB.NET程序
    · JAVA开发  · Delphi程序
    · 脚本语言
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台