Java笔记:IO

说明,本文内容来源于java io系列01之 “目录”,做了一些删减。

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上文件的速度快很多!

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

Java 1.0和Java 1.1 的IO类的比较

基本类对比表

Java 1.0 IO基本类(字节流) Java 1.1 IO基本类(字符流)
InputStream Reader
OutputStream Writer
FileInputStream FileReader
FileOutputStream FileWriter
StringBufferInputStream StringReader
StringWriter
ByteArrayInputStream CharArrayReader
ByteArrayOutputStream CharArrayWriter
PipedInputStream PipedReader
PipedOutputStream PipedWriter

装饰器对比表

Java 1.0 IO装饰器(字节流) Java 1.1 IO装饰器(字符流)
FilterInputStream FilterReader
FilterOutputStream FilterWriter(没有子类的抽象类
BufferedInputStream BufferedReader(也有 readLine())
BufferedOutputStream BufferedWriter
DataInputStream
PrintStream PrintWriter
LineNumberInputStream LineNumberReader
StreamTokenizer
PushBackInputStream PushBackReader

io框架

以字节为单位的输入流的框架图:

是以字节为单位的输出流的框架图:

以字节为单位的输入流和输出流关联的框架图:

以字符为单位的输入流的框架图:

以字符为单位的输出流的框架图:

以字符为单位的输入流和输出流关联的框架图:

字节转换为字符流的框架图:

字节和字符的输入流对应关系:

字节和字符的输出流对应关系:

时间: 2025-01-21 19:31:55

Java笔记:IO的相关文章

彻底明白Java的IO系统

转自--豆豆技术网络(http://www.ddvip.net/program/java/index1/61.htm) 一. Input和Output1. stream代表的是任何有能力产出数据的数据源,或是任何有能力接收数据的接收源.在Java的IO中,所有的stream(包括Input和Out stream)都包括两种类型:1.1 以字节为导向的stream以字节为导向的stream,表示以字节为单位从stream中读取或往stream中写入信息.以字节为导向的stream包括下面几种类型:

装饰者模式(Decorator Pattern) Java的IO类的使用方法

Java的IO类使用装饰者模式进行扩展, 其中FilterInputStream类, 就是装饰者(decorator)的基类. 实现其他装饰者(decorator), 需要继承FilterInputStream类. 代码: /** * @time 2014年5月23日 */ package decorator.io; import java.io.FilterInputStream; import java.io.IOException; import java.io.InputStream;

java的IO流的典型应用

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

Java的IO系统

"对语言设计人员来说,创建好的输入/输出系统是一项特别困难的任务." 由于存在大量不同的设计方案,所以该任务的困难性是很容易证明的.其中最大的挑战似乎是如何覆盖所有可能的因素.不仅有三种不同的种类的IO需要考虑(文件.控制台.网络连接),而且需要通过大量不同的方式与它们通信(顺序.随机访问.二进制.字符.按行.按字等等). Java库的设计者通过创建大量类来攻克这个难题.事实上,Java的IO系统采用了如此多的类,以致刚开始会产生不知从何处入手的感觉(具有讽刺意味的是,Java的IO设

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[]

java的io的问题 使用java输出文本到文本文件,但是打开文件没有得到输出的内容

问题描述 java的io的问题 使用java输出文本到文本文件,但是打开文件没有得到输出的内容 试了好多函数,但是就是没有最后输出到文本文件,程序没有报错,需要用的flush()也用了,最后关闭输出函数也关闭了,但是就是没有在文本文件中得到从java中输出的内容,还有什么地方需要注意的, 是我的路径表示错误了,应该都用的, 解决方案 把代码贴出来看看,------- 解决方案二: 贴出来代码看看吧!空口说白话啊 解决方案三: java io输出的编码问题 解决方案四: 没有代码没法看错误啊

fileoutputstream-关于java的IO中PrintWriter问题

问题描述 关于java的IO中PrintWriter问题 public class PrintIOTest { public static void main(String[] ages){ try{ FileOutputStream fos = new FileOutputStream(""test.txt""); PrintStream ps = new PrintStream(fos); ps.print(""helloworld!&quo

java的IO当中字节流和字符流的区别和联系是什么

问题描述 java的IO当中字节流和字符流的区别和联系是什么 java的IO当中字节流和字符流的区别和联系是什么 在什么情况下用字符流,或者用字节流. 解决方案 两个都是流,一个是以一个个字节传的,一个是以一个个字符传的,再不懂百度 解决方案二: 不清数 不是这份专业的 解决方案三: 不清数 不是这份专业的 解决方案四: 不清数 不是这份专业的 解决方案五: 不清数 不是这份专业的 解决方案六: Java IO中字节流和字符流的区别Java IO中字节流和字符流的区别字节流和字符流的区别是什么?

对象-java中io等非托管资源close与赋值为null有什么区别

问题描述 java中io等非托管资源close与赋值为null有什么区别 io操作如果没有close而直接赋值为null有什么后果,而close之后又没有赋值为null,也就是还有对象的引用,那这个对象会不会释放内存,垃圾回收器会不会回收它 Reader reader = new InputstreamReader(new FileInputStream()); 如果reader.close()关闭了reader的资源 则FileInputStream的资源有没有关闭 ,没关闭的话如何关闭 解决

Java基于IO流读取文件的方法_java

本文实例讲述了Java基于IO流读取文件的方法.分享给大家供大家参考,具体如下: public static void readFile(){ String pathString = TEST.class.getResource("/simu").getFile(); try { pathString = URLDecoder.decode(pathString, "utf-8"); } catch (UnsupportedEncodingException e1)