内容正文:
第9章 IO(输入输出)流
流概念
字节流
字符流
其他I/O流
File类
RandomAccessFile
字符编码
NIO
流概述
字节流
☞点击查看本小节知识架构
字符流
☞点击查看本小节知识架构
其他I/O流
File类
RandomAccessFile
☞点击查看本小节知识架构
字符编码
☞点击查看本小节知识架构
☞点击查看本小节知识架构
9.2
9.3
9.4
9.5
9.1
9.7
9.6
NI/O
☞点击查看本小节知识架构
9.8
目录
掌握
了解
了解
掌握
学习目标
掌握字节流和字符流
1
了解常见字符编码
4
2
了解其他I/O流
3
掌握File类及其用法
销售额 掌握知识 理解知识 熟悉知识 了解知识 2.5 2.5 2.5 2.5
程序的主要任务是操作数据。在程序运行时,这些数据都必须位于内存中,并且属于特定的类型,程序才能操作它们。Java I/O系统负责处理程序的输入和输出,I/O类库位于java.io包中,它对各种常见的输入流和输出流进行了抽象。本章将对I/O流进行详细讲解。
流就是字节序列的抽象概念,能被连续读取数据的数据源和能被连续写入数据的接收端就是流,流机制是Java及C++中的一个重要机制,通过流开发人员可以自由控制文件、内存、I/O设备等数据的流向。而I/O流就是用于处理设备上的数据,如硬盘、内存、键盘录入等,就好像管道,将两个容器连接起来,如图所示。
9.1 流概述
I/O流有很多种,按操作数据单位不同可分为字节流(8 b)和字符流(16 b),按数据流的流向不同分为输入流和输出流,如表所示。
9.1 流概述
从表中可看出I/O流的大致分类,Java的I/O流共涉及40多个类,实际上这些类非常规则,都是从这4个抽象基类派生的,由这四个类派生出来的子类名称都是以其父类名作为子类名后缀。接下来会详细讲解这些流的使用。
9.2 字节流
9.2.1
字节流的概念
返回目录
9.2.2
字节流读写文件
9.2.3
文件的复制
知识架构
9.2 字节流
9.2.4
字节流的缓冲区
返回目录
9.2.5
装饰设计模式
9.2.6
字节缓冲流
知识架构
在计算机中,所有的文件都能以二进制(字节)形式存在,Java的I/O中针对字节传输操作提供了一系列流,统称为字节流。字节流有两个抽象基类InputStream和OutputStream,分别处理字节流的输入和输出,所有的字节输入流都继承自InputStream类,所有的字节输出流都继承自OutputStream类。在这里,输入和输出的概念要有一个参照物,是站在程序的角度来理解这两个概念,如图所示。
9.2 字节流
9.2.1 字节流的概念
在图中,从程序到文件是输出流(OutputStream),将数据从程序输出到文件。从文件到程序是输入流(InputStream),通过程序读取文件中的数据。这样就实现了数据的传输。
在Java中,提供了一系列用于操作文件读写的有关方法,接下来先了解一下InputStream类的方法,如表所示。
9.2 字节流
9.2.1 字节流的概念
9.2 字节流
9.2.1 字节流的概念
表中列出了InputStream类的方法,其中最常用的是三个重载的read()方法和close()方法,read()方法是从流中逐个读入字节,int read(byte[] b)方法和int read(byte[] b, int off, int len)方法是将若干字节以字节数组形式一次性读入,提高读数据的效率。操作I/O流时会占用宝贵的系统资源,当操作完成后,应该将I/O所占用的系统资源释放,这时就需要调用close()方法关闭流。
9.2 字节流
9.2.1 字节流的概念
介绍完InputStream类的相关方法,接下来要介绍一下它所对应的OutputStream类的相关方法,如表所示。
9.2 字节流
9.2.1 字节流的概念
表中,三个重载的write()方法都是向输出流写入字节,其中,void write(int b)方法是逐个写入字节;void write(byte[] b) 方法和void write(byte[] b, int off, int len) 方法是将若干个字节以字节数组的形式一次性写入,提高写数据的效率;flush()方法用于将当前流的缓冲区中数据强制写入目标文件;close()方法用来关闭此输出流并释放系统资源。
InputStream和OutputStream都是抽象类,不能实例化,所以要实现功能,需要用到它们的子类,接下来先了解一下这些子类。
9.2 字节流
9.2.1 字节流的概念
如图所示。
9.2 字节流
9.2.1 字节流的概念
从图中可看出,