当前位置:  编程技术>java/j2ee

Java 1.0和Java 1.1 的IO类的比较

    来源: 互联网  发布时间:2014-10-28

    本文导语:  Java 1.0 IO系统介绍1 Java IO版本Java库的IO分为输入/输出两部分。早期的Java 1.0版本的输入系统是InputStream及其子类,输出系统是OutputStream及其子类。后来的Java 1.1版本对IO系统进行了重新设计。输入系统是Reader及其子类,输出系统...

Java 1.0 IO系统介绍
1 Java IO版本
Java库的IO分为输入/输出两部分。
早期的Java 1.0版本的输入系统是InputStream及其子类,输出系统是OutputStream及其子类。
后来的Java 1.1版本对IO系统进行了重新设计。输入系统是Reader及其子类,输出系统是Writer及其子类。
Java1.1之所以要重新设计,主要是为了添加国际化支持(即添加了对16位Unicode码的支持)。具体表现为Java 1.0的IO系统是字节流,而Java 1.1的IO系统是字符流。

字节流,就是数据流中最小的数据单元是8位的字节。
字符流,就是数据流中最小的数据单元是16位的字符。
字节流在操作的时候,不会用到缓冲;而字符流会用到缓冲。所以,字符流的效率会更高一些。
至于为什么用到缓冲会效率更高一些呢?那是因为,缓冲本质上是一段内存区域;而文件大多是存储在硬盘或者Nand Flash上面。读写内存的速度比读写硬盘或Nand Flash上文件的速度快很多!

目前,文件大多以字节的方式存储的。所以在开发中,字节流使用较为广泛。

 
2 Java 1.0和Java 1.1 的IO类的比较
 
表01_Java 1.0和Java 1.1的IO基本类对比表
  

表02_Java 1.0和Java 1.1的IO装饰器对比表
 

之所以将Java IO系统分为基本类和装饰器,是因为基本类主要是将流分为文件、字符串等不同种类,而装饰器是为了实现“Decorator模式”(参考 “4 Decorator模式”)。

3 Java 1.0 IO系统介绍
因为Java 1.0与Java 1.1的IO系统的原理和使用方法都相似。所以,下面主要对Java 1.0的IO系统进行说明。

3.1输入流
InputStream是字节输入流的所有类的超类,它主要包括以下几个常用的子类。
(01)ByteArrayInputStream
将Byte数组作为字节数组输入流使用。
(02)StringBufferInputStream
将字符串作为字符串输入流使用。已过时,不建议使用。
(03)FileInputStream
将文件或FileDescriptor作为文件输入流使用。创建该输入流时,传递的参数可以是“文件名”(String类型)、“File对象”或“FileDescriptor对象”(即可以是标准输入流、输出流、错误流的句柄)。
(04)PipedInputString
提供要写入管道输出流的所有数据字节。创建该输入流的时候,可以指定对应的管道输出轮流;这样做的话,意味着将对应的管道输入流连接到了管道输出流。
(05)FilterInputStream
它直接继承与InputStream,主要用于实现Decorator模式(这在后面进行说明)。
FilterInputStream主要有两个派生类“DataInputStream”和“BufferedInputStream”。DataInputStream提供了读取byte、char、int等基本类型和String的各种接口;BufferedInputStream提供了缓冲功能。

3.2输出流
OutputStream是字节输出流的所有类的超类,它主要包括以下几个常用的子类。
(01)ByteArrayOutputStream
字节数组输出流,其中的数据被写入一个 byte 数组。缓冲区会随着数据的不断写入而自动增长。可使用 toByteArray() 和 toString() 获取数据。
(02)FileOutputStream
文件输出流是用于将数据写入 File 或 FileDescriptor 的输出流。
  文件是否可用或能否可以被创建取决于基础平台。特别是某些平台一次只允许一个 FileOutputStream(或其他文件写入对象)打开文件进行写入。在这种情况下,如果所涉及的文件已经打开,则此类中的构造方法将失败。
(03)PipedOutputString
可以将管道输出流连接到管道输入流来创建通信管道。管道输出流是管道的发送端。通常,数据由某个线程写入 PipedOutputStream 对象,并由其他线程从连接的 PipedInputStream读取。
  不建议对这两个对象尝试使用单个线程,因为这样可能会造成该线程死锁。如果某个线程正从连接的管道输入流中读取数据字节,但该线程不再处于活动状态,则该管道被视为处于 毁坏 状态。
(04)FilterOutputStream
它直接继承与OutputStream,主要用于实现Decorator模式(这在后面进行说明)。
FilterOutputStream主要有两个派生类“DataOutputStream”和“BufferedOutputStream”。DataOutputStream提供了写入byte、char、int等基本类型和String的各种接口;BufferedOutputStream提供了缓冲功能。

 
4 Decorator模式
Decorator,装饰模式,又称为Wrapper。它的主要功能在于动态扩展一个类的功能。
JavaIO系统包括“文件流”、“字符串流”、“字节流”、“缓冲流”等。假如,我们同时需要多种数据流的功能,如输入流和缓冲流。若采用继承的方式,数量太可观了。为了解决这一问题,Decorator模式实现了动态扩展,即在运行的时候动态的给一个类“装饰”上某些功能。比如:
InputStream input = newBufferedInputStream(new FileInputStream(“test.txt”));
这就是将FileInputStream装饰成了BufferedInputStream,使它具有了缓冲功能。

5 JAVA IO例子

代码如下:

package com.skywang;

import java.io.*;
public class IOTest{
    publicstaticvoidmain(String[] args) throwsIOException {
       try {
            File f=newFile("d:123.txt");
            OutputStream out =
                  new BufferedOutputStream(
                      new FileOutputStream(f));
            String str="helloskywang!";

            byte[]b=str.getBytes();
            for(int i = 0; i < b.length; i++) {
                out.write(b[i]);
            }
            out.close();
       }catch (FileNotFoundException e){
           e.printStackTrace();
       }catch (SecurityException e){
           e.printStackTrace();
       }
    }
}

    
 
 

您可能感兴趣的文章:

  • 用java读一个比较大的文本文件(几百k~几M)怎么才能比较快?
  • 初学JAVA,请问各位哪本数据结构(JAVA版)比较好?
  • 初学java,请各位给我推荐比较好的java书
  • 本人想学java,请问java程序员的待遇如何,和java主要有几个比较强的方向
  • 我是一名JAVA初学者,请问哪里有比较好的JAVA的源程序下载
  • 我现在刚刚学到JAVA的线程和socket,请问《JAVA 2宝典》和《JAVA核心技术卷2:高级特性》哪本书讲得比较好?
  • java初学看什么例子比较好。
  • 请问学习java比较好的中文书籍有哪些,谢谢!
  • 假设现在对且仅对java基础比较熟悉(通过scjp),要做一个java proxy的软件,步聚是什么?
  • 关于java比较好的书
  • 用java编写网络程序,那本书比较好?
  • JAVA编译是不是比较慢呀??
  • 现在哪种java的开发环境比较受欢迎(vj++??jbuilder??),请推荐几本学习java的好书?
  • JAVA可以真正实现实数的相等比较吗?
  • 我对java比较感兴趣??学习。。
  • 各位高手:北京的java培训哪个单位比较好,就是组织你考scjp之类的,或者发java的证书?
  • 求教一个比较初级的java编译问题
  • 在Linux下用什么平台开发java程序比较好?
  • php iis7站长之家
  • Java源文件比较工具 DiffJ
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • java命名空间java.sql类types的类成员方法: java_object定义及介绍
  • 我想学JAVA ,是买THINK IN JAVA 还是JAVA2核心技术:卷1 好???
  • java命名空间java.awt.datatransfer类dataflavor的类成员方法: imageflavor定义及介绍
  • 请问Java高手,Java的优势在那里??,Java主要适合于开发哪类应用程序
  • java命名空间java.lang.management类managementfactory的类成员方法: getcompilationmxbean定义及介绍
  • 如何将java.util.Date转化为java.sql.Date?数据库中Date类型对应于java的哪个Date呢
  • java命名空间java.lang.management接口runtimemxbean的类成员方法: getlibrarypath定义及介绍
  • 谁有电子版的《Java编程思想第二版(Thinking in java second)》和《Java2编程详解(special edition java2)》?得到给分
  • java命名空间java.lang.management接口runtimemxbean的类成员方法: getstarttime定义及介绍
  • 我对JAVA一窍不通,可惜别人却给我一个Java的project,要我做一个安装程序,请问哪里有JAVA INSTALLER下载,而且我要不要安装java的sdk才能完成此项任务?
  • java命名空间java.awt.datatransfer类dataflavor的类成员方法: stringflavor定义及介绍
  • 新年第一天,让我们讨论一下未来一年JAVA的发展趋势! 个人认为,JAVA将主要朝ERP和JAVA手机方面发展!
  • java命名空间java.security类keystore的类成员方法: getdefaulttype定义及介绍
  • 我想学Java,但不知道Java的实用的开发工具有那些,Java主要用在哪些方面,EJB到底是什么东西??
  • java命名空间java.lang.management接口runtimemxbean的类成员方法: getclasspath定义及介绍
  • redhat7.3下,java程序打印中文直接用java命令执行正常,用crontab执行java命令为乱码
  • java命名空间java.awt.datatransfer类dataflavor的类成员方法: javaserializedobjectmimetype定义及介绍
  • 各位学java的朋友,学java的未来是什么,你们学java都用来开发什么项目啊!来者给分!!
  • java命名空间java.awt.datatransfer类dataflavor的类成员方法: javafilelistflavor定义及介绍
  • 请问java程序中的import为什么有的用java.….*,而有的又用java.….…,有什么区别吗?
  • java命名空间java.lang.management接口runtimemxbean的类成员方法: getvmname定义及介绍
  • 简单说说Java SE、Java EE、Java ME三者之间的区别


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3