Java 1.1的IO流

到这个时候,大家或许会陷入一种困境之中,怀疑是否存在IO流的另一种设计方案,并可能要求更大的代码量。还有人能提出一种更古怪的设计吗?事实上,Java 1.1对IO流库进行了一些重大的改进。看到Reader和Writer类时,大多数人的第一个印象(就象我一样)就是它们用来替换原来的InputStream和OutputStream类。但实情并非如此。尽管不建议使用原始数据流库的某些功能(如使用它们,会从编译器收到一条警告消息),但原来的数据流依然得到了保留,以便维持向后兼容,而且:
(1) 在老式层次结构里加入了新类,所以Sun公司明显不会放弃老式数据流。
(2) 在许多情况下,我们需要与新结构中的类联合使用老结构中的类。为达到这个目的,需要使用一些“桥”类:InputStreamReader将一个InputStream转换成Reader,OutputStreamWriter将一个OutputStream转换成Writer。
所以与原来的IO流库相比,经常都要对新IO流进行层次更多的封装。同样地,这也属于装饰器方案的一个缺点——需要为额外的灵活性付出代价。
之所以在Java 1.1里添加了Reader和Writer层次,最重要的原因便是国际化的需求。老式IO流层次结构只支持8位字节流,不能很好地控制16位Unicode字符。由于Unicode主要面向的是国际化支持(Java内含的char是16位的Unicode),所以添加了Reader和Writer层次,以提供对所有IO操作中的Unicode的支持。除此之外,新库也对速度进行了优化,可比旧库更快地运行。
与本书其他地方一样,我会试着提供对类的一个概述,但假定你会利用联机文档搞定所有的细节,比如方法的详尽列表等。

时间: 2024-09-22 21:09:35

Java 1.1的IO流的相关文章

io流-java问题:学习IO流课程的Filewriter时遇到了实操跟老师所讲,并不一致的情况

问题描述 java问题:学习IO流课程的Filewriter时遇到了实操跟老师所讲,并不一致的情况 老师讲课时说,要在我下图的箭头那个位置多写个",true",代表数据追加,以此可以分批次writer数据到文件里,否则新数据会覆盖前面的旧数据,视频演示时的确也符合他的这个说法,但我下来自己练习时发现,不用加true它自己就会追加数据耶?这是怎么回事,用的软件版本都是一样的,怎么会和教程里不同 解决方案 1楼说的没错,不知你谁否已经理解. 调用一次new Filewriter("

Java基础-19总结IO流,异常try…catch,throws,File类

1:异常(理解) (1)程序出现的不正常的情况. (2)异常的体系 Throwable |--Error 严重问题,我们不处理. |--Exception |--RuntimeException 运行期异常,我们需要修正代码 |--非RuntimeException 编译期异常,必须处理的,否则程序编译不通过 package cn.itcast_01; /*  * 异常:程序出现了不正常的情况.  *   * 举例:今天天气很好,班长出去旅游.骑着自行车,去山里面呼吸新鲜空气.  *  问题1:

Java Mail 如何发送IO 流

问题描述 JavaMail 发送邮件的时候,如何把程序中读出来的IO流直接发出去,而不是保存成临时文件,在通过MimeBodyPart.attachFile(new File(filePath));这种方式发?? 解决方案 不可以!邮件SMTP协议里,邮件的头.体都是字符,所以邮件都是做Base64编码的,是字符,所以不可能有二进制流的形式.邮件的附件也会被编码,所以没有二进制流的发送方式.

Java socket中关闭IO流后,发生什么事?(以关闭输出流为例)

声明:该博文以socket中,关闭输出流为例进行说明.   为了方便讲解,我们把DataOutputstream dout = new DataOutputStream(new BufferedOutputStream(mySocket.getOutputStream()));中的dout做为Socket输出流的代言.同样的,din是输入流的代言. 可以造成dout被关闭的操作有: 1.调用dout.close();或din.close();因为使用这种流关闭,会造成socket被关闭,所以输入

java笔记八:IO流之字符流与字符缓冲流

java中字符流主要都是继承于Reader和Writer两个抽象类.用于对字符文本的读写操作.   一.转换类流 1 package com.iotest; 2 3 import java.io.FileInputStream; 4 import java.io.FileNotFoundException; 5 import java.io.FileOutputStream; 6 import java.io.IOException; 7 import java.io.InputStreamRe

java笔记七:IO流之字节流与字节缓冲流

在I/O类库中,java.io.InputStream和java.io.OutputStream分别表示字节输入流和字节输出流,它们都是抽象类,不能实例化,数据流中的最小单位是字节,所以叫做字节流. 一.InputStream中的读取数据的方法如下: 1 .int read() 功能:读取一个字节的数据,并且返回读到得数据,如果返回-1,则表示读到输入流的末尾. 2.int read(byte[] b) 功能:从输入流中读取一定量的字节,并将其存储在字节数组b中,返回实际读取的字节数,如果返回-

java的IO流的典型应用

尽管库内存在大量IO流类,可通过多种不同的方式组合到一起,但实际上只有几种方式才会经常用到.然而,必须小心在意才能得到正确的组合.下面这个相当长的例子展示了典型IO配置的创建与使用,可在写自己的代码时将其作为一个参考使用.注意每个配置都以一个注释形式的编号起头,并提供了适当的解释信息.   //: IOStreamDemo.java // Typical IO Stream Configurations import java.io.*; import com.bruceeckel.tools.

java 标准Io流

问题描述 我想问下,为什么java里面要有标准IO流,有了字节流和字符流,不就可以了吗.为什么啊,我晕. 问题补充:blessed24 写道 解决方案 标准IO指计算机的的输入设备和输出设备,搞这些的吧,为了兼容不同系统,不同物理设备的输入与输出!解决方案二:引用是不是说,只有标准Io实现了跨平台,其他的流都不是跨平台的?标准IO 一般所有的操作系统都是一样的...windows要遵循,linux也一样吧....解决方案三:引用inpublic static final InputStream

Java中IO流缓冲区的装饰模式的体现

一.Java中IO流缓冲区 import java.io.*; public class BufferedTest {public static void copy1(){InputStream is = null;OutputStream os = null;try{is = new FileInputStream("c:\\xy1.jpg");os = new FileOutputStream("d:\\xy2.jpg");int len = 0;byte[]