Java高级程序设计
Java高级程序设计
? 第一部分
– 第一章 Java入门基础
– 第二章 异常
– 第三章 Java Applet类型
– 第四章 图形用户界面 GUI(一) ——AWT
– 第五章 Java中的事件处理机制
– 第六章 图形用户界面 GUI(二) ——Swing
Java高级程序设计
– 第七章 多线程
– 第八章 I/O输入输出流
– 第九章 Java数据库连接( JDBC)
– 第十章 Java网络编程
? 第二部分
– 第一章 Java API
– 第二章 Java与多媒体
– 第三章 Java Bean基础
Java高级程序设计 I/O输入输出流
第八章 I/O输入输出流
? 8.1 流的概念
? 8.2 字节流、字符流和预订义流
– 8.2.1 字节流
– 8.2.2 字符流
– 8.2.3 预订义流
? 8.3 File类
? 8.4 InputStream和 OutputStream
– 8.4.1 FileInputStream
– 8.4.2 FileOutputStream
Java高级程序设计 I/O输入输出流
第八章 I/O输入输出流
? 8.5 Reader和 Writer
– 8.5.1 FileReader
– 8.5.2 FileWriter
? 8.6 RandomAccessFile类
? 8.7 PipedInputStream和 PipedOutputStream
? 8.8 过滤流和节点流
– 8.8.1 过滤流和节点流
– 8.8.2 BufferedInputStream和 BufferedOutputStream
– 8.8.3 DataInputStream和 DataOutputStream
Java高级程序设计 I/O输入输出流
8.1 流的概念
? 流概念的理解
? 流的分类
– 按流动的方向分为输入流和输出流
– 按流动的数据类型分为字符流和字节流
– 按流的建立方式和工作原理 分为节点流和过滤流
Java高级程序设计 I/O输入输出流
8.2 字节流、字符流
和预定义流
? 字节流
– 字节流提供了对字节进行输入输出处理的方法 。按
照传输的方向字节流可以分为 InputStream和
OutputStream。其中 InputStream是所有输入字节
流的父类,OutputStream是所有输出字节流的父类。
– 在 InputStream和 OutputStream中定义了输入字节
流和输出字节流最基本的方法,他们是 抽象类 。
Java高级程序设计 I/O输入输出流
8.2 字节流、字符流
和预定义流
? 输入字节流的类层次图
Java高级程序设计 I/O输入输出流
8.2 字节流、字符流
和预定义流
? 输出字节流的类层次图
Java高级程序设计 I/O输入输出流
8.2 字节流、字符流
和预定义流
? 字符流
– 字符流提供了对字符进行输入输出处理的方法。字
节流与字符流主要的区别是他们的处理方式。 所有
的字节流都是基于字节对数据进行处理,而实际使
用中很多情况我们处理的数据是文本字符,所以
Java提供了基于字符处理的字符流。
Java高级程序设计 I/O输入输出流
8.2 字节流、字符流
和预定义流
– 按照传输的方向字符流可以分为 Reader和 Writer。
其中 Reader是所有输入字符流的父类,Writer是所
有输出字符流的父类。
– 在 Reader和 Writer中定义了输入字符流和输出字符
流最基本的方法。
Java高级程序设计 I/O输入输出流
8.2 字节流、字符流
和预定义流
? 输入字符流的类层次图
Java高级程序设计 I/O输入输出流
8.2 字节流、字符流
和预定义流
? 输出字符流的类层次图
Java高级程序设计 I/O输入输出流
8.2 字节流、字符流
和预定义流
? 预订义流
– Java程序默认导入 java.lang包,这个包中有一个
System类,这个类包含三个预定义静态常量,分别
是 in,out和 err。
– System,in是标准输入流,默认设备是键盘。
System,out是标准输出流,默认设备是控制台。
System,err是标准错误流,默认设备是控制台。
Java高级程序设计 I/O输入输出流
8.3 File类
? File类
– Java中的 File类指文件和目录的集合。
– Java语言中通过 File类来建立与磁盘文件的联系。
File类主要用来获取文件或者目录的信息,File类的
对象本身不提供对文件的处理功能,要想对文件实
现读写操作需要使用输入输出流。
Java高级程序设计 I/O输入输出流
8.3 File类
? 注意:
– Java能正确处理 UNIX和 Windows/DOS约定路径分
隔符。如果在 Windows版本的 Java下用斜线( /),
路径处理依然正确。记住,如果你用
Windows/DOS使用反斜线( \)的约定,你需要在
字符串内使用它的转义序列( \\)。 Java约定是用
UNIX和 URL风格的斜线来作路径分隔符。
Java高级程序设计 I/O输入输出流
8.4 InputStream 和
OutputStream
? FileInputStream
– FileInputStream是 InputStream类的子类。常用的
构造方法如下:
? FileInputStream(String name) 使用指定的文件名
name创建一个 FileInputStream的对象,如果文件不存在
会产生 FileNotFoundException。
? FileInputStream(File file) 使用指定的文件对象来创建
一个 FileInputStream的对象,如果文件不存在会产生
FileNotFoundException。
Java高级程序设计 I/O输入输出流
8.4 InputStream 和
OutputStream
– 下面的例子创建了两个使用同样磁盘文件且各含一
个上述构造方法的 FileInputStream对象:
FileInputStream f1 = new FileInputStream("hello,txt")
File f = new File("hello,txt ");
FileInputStream f2 = new FileInputStream(f);
? 尽管第一个构造方法可能更常用到,第二个构造方法允
许在把文件赋给输入流之前用 File对象的方法更进一步检
查文件,例如判断文件是否存在。
Java高级程序设计 I/O输入输出流
8.4 InputStream 和
OutputStream
– FileInputStream的常用方法:
? int read( )如果下一个字节可读则返回一个整型,遇到文
件尾时返回 -1
? int read(byte buffer[ ])试图读取 buffer.length个字节到
buffer中,并返回实际成功读取的字节数。遇到文件尾时
返回 -1
? int read(byte buffer[ ],int offset,int numBytes)试图
读取 buffer中从 buffer[offset]开始的 numBytes个字节,返
回实际读取的字节数。遇到文件尾时返回 -1
? void close( )关闭输入源。关闭之后的读取会产生
IOException异常
Java高级程序设计 I/O输入输出流
8.4 InputStream 和
OutputStream
? FileOutputStream
– FileOutputStream是 OutputStream类的子类。常用
的构造方法如下:
? FileOutputStream(String name) 使用指定的文件名
name创建一个 FileInputStream的对象。
? FileOutputStream(File file) 使用指定的文件对象来创
建一个 FileInputStream的对象。
– FileOutputStream的创建不依赖于文件是否存在。
在创建对象时 FileOutputStream在打开输出文件之
前创建它。
Java高级程序设计 I/O输入输出流
8.4 InputStream 和
OutputStream
– FileOutputStream的常用方法:
? void close( )关闭输出流。关闭后的写操作会产生
IOException异常
? void flush( ) 刷新输出缓冲区
? void write(int b)向输出流写入单个字节。注意参数是
一个整型数,它允许你不必把参数转换成字节型就可以
调用 write( )
? void write(byte buffer[ ])向一个输出流写一个完整的
字节数组
? void write(byte buffer[ ],int offset,int numBytes)
写数组 buffer以 buffer[offset]为起点的 numBytes个字节区
域内的内容
Java高级程序设计 I/O输入输出流
8.5 Reader和 Writer
? 字符流为 基于字符 的输入输出处理提供了丰富
的功能,而 Reader和 Writer是所有字符流的基
类。 Reader和 Writer都是 抽象类,它们定义了
字符流的一些常用方法(见书表 8-5、表 8-6)。
Java高级程序设计 I/O输入输出流
8.5 Reader和 Writer
? FileReader
– FileReader类是 Reader类的子类,它可以对文件进
行读取。常用的构造方法如下:
? FileReader(String name) 使用指定的文件名 name创
建一个 FileReader的对象,如果文件不存在会产生
FileNotFoundException。
? FileReader(File file) 使用指定的文件对象来创建一个
FileReader的对象,如果文件不存在会产生
FileNotFoundException。
– FileReader常用的方法参考 Reader类。
Java高级程序设计 I/O输入输出流
8.5 Reader和 Writer
? FileWriter
– FileWriter类是 Writer类的子类,它可以对文件进行
写入。它常用的构造方法如下:
? FileWriter(String name) 使用指定的文件名 name创建
一个 FileWriter的对象。
? FileWriter(File file) 使用指定的文件对象 file创建一个
FileWriter的对象。
– FileWriter类的创建不依赖于文件存在与否。在创建
文件之前,FileWriter将在创建对象时打开它来作为
输出 。
Java高级程序设计 I/O输入输出流
8.6 RandomAccessFile类
? RandomAccessFile类
– 有时候必须对文件的某些部分进行读取或者写入的
操作,也就是进行随机存取,即读写文件的位置要
能够在文件中随意的移动。而我们前面提到的输入
输出流都只能对文件进行顺序的读写,当要对文件
进行随机存取的时候我们使用 RandomAccessFile
类来进行处理。
Java高级程序设计 I/O输入输出流
8.6 RandomAccessFile类
? 类 RandomAccessFile的声明为:
public class RandomAccessFile extends Object
implements DataInput,DataOutput
– 接口 DataInput 中定义的方法主要包括从流中读取基本类型
的数据、读取一行数据、或者读取指定长度的字节数。如:
readBoolean( ),readInt( ),readLine( ),readFully( ) 等。
接口 DataOutput 中定义的方法主要是向流中写入基本类型
的数据、或者写入一定长度的字节数组。如,writeChar( )、
writeDouble( ),write( ) 等。
– 注意,RandomAccessFile可对文件实现读和写两种操作 。
Java高级程序设计 I/O输入输出流
8.6 RandomAccessFile类
? RandomAccessFile类的常用构造方法:
– RandomAccessFile(String name,String
mode) name是文件名,mode是打开方式,例如
,r”表示只读,,rw”表示可读写。
– RandomAccessFile(File file,String mode)
file是文件对象,mode 是打开方式,例如,r”表示
只读,,rw”表示可读写。
Java高级程序设计 I/O输入输出流
8.6 RandomAccessFile类
? RandomAccessFile类操作文件指针的常用方法:
– long getFilePointer( ) 用于得到当前的文件指针
– void seek(long pos) 用于移动文件指针到指定
的位置,调用 seek( )方法后,接下来的读或写操作
将在文件的新位置发生
– int skipBytes(int n) 使文件指针向前移动指定
的 n个字节
Java高级程序设计 I/O输入输出流
8.7 PipedInputSream
和 PipedOutputStream
? 管道流
– 管道流不同于 I/O流和网络流,它的本质是内存中的
一块存储数据的结构体。如果写线程当且仅当管道
满的时候会阻塞,读线程当且仅当管道空的时候会
阻塞。
– 管道流,用于线程间的通信 。要使管道流有用,必
须同时构造管道输入流和管道输出流。
Java高级程序设计 I/O输入输出流
8.7 PipedInputSream
和 PipedOutputStream
– Java为这种管道概念提供了 PipedInputStream和
PipedOutputStream类。将这两者结合在一起,它
们允许一个 Java组件输出数据到输出流,而另一个
组件将这个输出流当作输入流来读取。 管道输入流
和输出流必须连接才能实现数据的流动。
Java高级程序设计 I/O输入输出流
8.7 PipedInputSream
和 PipedOutputStream
? 管道输入流的构造方法为:
? public PipedInputStream( ) 创建一个没有连接输出流
的输入流。
? public PipedInputStream(PipedOutputStream src)
构造一个连接参数指定的输出流的输入流。
? 管道输出流的构造方法为,
? public PipedOutputStream( ) 创建一个没有连接输入
流的输出流。
? public PipedOutputStream(PipedInputStream snk)
创建一个连接由参数指定的输入流的输出流
Java高级程序设计 I/O输入输出流
8.8 过滤流与节点流
? 过滤流与节点流
– 根据流的建立方式和工作原理,将流分为:节点流
( Node Streams)直接建立在输入、输出媒体上。
过滤流( Filter Streams),过滤流必须以某一个节
点流作为流的来源,可以在读 /写数据的同时对数据
进行处理。
Java高级程序设计 I/O输入输出流
8.8 过滤流与节点流
? 过滤流必须建立在节点流之上,对节点流中的
数据进行某些加工、处理,并提供一些友好的
方法供用户进行输入、输出操作以及流控制。
? 我们前面学习过的 FileReader,FileWriter、
FileInputStream,FileOutputStream对文件进
行直接的操作,属于节点流。。
Java高级程序设计 I/O输入输出流
BufferedInputStream和
BufferedOutputStream
? Java中的 InputStream类对流数据进行封装的时
候是不具备缓冲功能的,由于数据的传输速度
远小于处理器的运算速度,会造成处理器的浪
费。因此,Java语言提供了 BufferedInputStream
这个过滤流来封装 InputStream节点流,对流数
据增加了带缓冲的封装来提高数据处理的性能。
同样的提供了 BufferedOutputStream来提高
OutputStream类的数据处理性能。
Java高级程序设计 I/O输入输出流
BufferedInputStream和
BufferedOutputStream
? BufferedInputStream类
– 常用的构造方法:
? public BufferedInputStream(InputStream in)
? public BufferedInputStream(InputStream in,int size)
? 两种构造方法都是为某种输入流 in创建一个新的缓冲流,方法一创建
的缓冲大小为缺省值( 32 bytes),方法二则由用户指定缓冲区大小,
在性能优化时,通常都把 size的值设定为内存页大小或 I/O块大小的
整数倍。
– 在 I/O量不大时,该类所起作用不是很明显;但当程序 I/O量
很大,且对程序效率要求很高时,使用该类就能大大提高程
序的效率。
Java高级程序设计 I/O输入输出流
BufferedInputStream和
BufferedOutputStream
? BufferedOutputStream类
– 常用的构造方法:
? public BufferedOutputStream(OutputStream out)
? public BufferedOutputStream(OutputStream
out,int size)
? BufferedOutputStream的两种构造方法的用法与
BufferedInputStream的两种构造方法的用法类似。
Java高级程序设计 I/O输入输出流
DataInputStream和
DataOutputStream
? 在使用 Java语言进行编程时,常常需要对除了
二进制文件和使用文本文件外的基于 Data的数
据操作,这里的 Data指的是 Java的基本数据类
型和 String。基本数据类型包括 byte,int,char、
long,float,double,boolean和 short。使用前
面提到的 InputStream和 OutputStream对这些
数据 进行处理将会非常的麻烦,Java语言提供
了 DataInputStream和 DataOutputStream基本数据
类型进行操作。
Java高级程序设计 I/O输入输出流
DataInputStream和
DataOutputStream
– DataInputStream和 DataOutputStream的构造方法
的基本结构为:
? DataInputStream(节点流对象)
? DataInputStream(其它过滤流对象)
– 在 DataInputStream和 DataOutputStream两个类中
的方法都很简单,基本结构为 readXXXX( )和
writeXXXX( )其中 XXXX代表基本数据类型或者
String 。
Java高级程序设计 I/O输入输出流
常用的流分类
Java高级程序设计 I/O输入输出流
小结
? 掌握:
– 各种输入输出流在 Java编程中的运用
? 理解:
– 流的基本概念
– 流的分类
? 了解:
– 中文字符在流传输过程中的转换
Java高级程序设计
? 第一部分
– 第一章 Java入门基础
– 第二章 异常
– 第三章 Java Applet类型
– 第四章 图形用户界面 GUI(一) ——AWT
– 第五章 Java中的事件处理机制
– 第六章 图形用户界面 GUI(二) ——Swing
Java高级程序设计
– 第七章 多线程
– 第八章 I/O输入输出流
– 第九章 Java数据库连接( JDBC)
– 第十章 Java网络编程
? 第二部分
– 第一章 Java API
– 第二章 Java与多媒体
– 第三章 Java Bean基础
Java高级程序设计 I/O输入输出流
第八章 I/O输入输出流
? 8.1 流的概念
? 8.2 字节流、字符流和预订义流
– 8.2.1 字节流
– 8.2.2 字符流
– 8.2.3 预订义流
? 8.3 File类
? 8.4 InputStream和 OutputStream
– 8.4.1 FileInputStream
– 8.4.2 FileOutputStream
Java高级程序设计 I/O输入输出流
第八章 I/O输入输出流
? 8.5 Reader和 Writer
– 8.5.1 FileReader
– 8.5.2 FileWriter
? 8.6 RandomAccessFile类
? 8.7 PipedInputStream和 PipedOutputStream
? 8.8 过滤流和节点流
– 8.8.1 过滤流和节点流
– 8.8.2 BufferedInputStream和 BufferedOutputStream
– 8.8.3 DataInputStream和 DataOutputStream
Java高级程序设计 I/O输入输出流
8.1 流的概念
? 流概念的理解
? 流的分类
– 按流动的方向分为输入流和输出流
– 按流动的数据类型分为字符流和字节流
– 按流的建立方式和工作原理 分为节点流和过滤流
Java高级程序设计 I/O输入输出流
8.2 字节流、字符流
和预定义流
? 字节流
– 字节流提供了对字节进行输入输出处理的方法 。按
照传输的方向字节流可以分为 InputStream和
OutputStream。其中 InputStream是所有输入字节
流的父类,OutputStream是所有输出字节流的父类。
– 在 InputStream和 OutputStream中定义了输入字节
流和输出字节流最基本的方法,他们是 抽象类 。
Java高级程序设计 I/O输入输出流
8.2 字节流、字符流
和预定义流
? 输入字节流的类层次图
Java高级程序设计 I/O输入输出流
8.2 字节流、字符流
和预定义流
? 输出字节流的类层次图
Java高级程序设计 I/O输入输出流
8.2 字节流、字符流
和预定义流
? 字符流
– 字符流提供了对字符进行输入输出处理的方法。字
节流与字符流主要的区别是他们的处理方式。 所有
的字节流都是基于字节对数据进行处理,而实际使
用中很多情况我们处理的数据是文本字符,所以
Java提供了基于字符处理的字符流。
Java高级程序设计 I/O输入输出流
8.2 字节流、字符流
和预定义流
– 按照传输的方向字符流可以分为 Reader和 Writer。
其中 Reader是所有输入字符流的父类,Writer是所
有输出字符流的父类。
– 在 Reader和 Writer中定义了输入字符流和输出字符
流最基本的方法。
Java高级程序设计 I/O输入输出流
8.2 字节流、字符流
和预定义流
? 输入字符流的类层次图
Java高级程序设计 I/O输入输出流
8.2 字节流、字符流
和预定义流
? 输出字符流的类层次图
Java高级程序设计 I/O输入输出流
8.2 字节流、字符流
和预定义流
? 预订义流
– Java程序默认导入 java.lang包,这个包中有一个
System类,这个类包含三个预定义静态常量,分别
是 in,out和 err。
– System,in是标准输入流,默认设备是键盘。
System,out是标准输出流,默认设备是控制台。
System,err是标准错误流,默认设备是控制台。
Java高级程序设计 I/O输入输出流
8.3 File类
? File类
– Java中的 File类指文件和目录的集合。
– Java语言中通过 File类来建立与磁盘文件的联系。
File类主要用来获取文件或者目录的信息,File类的
对象本身不提供对文件的处理功能,要想对文件实
现读写操作需要使用输入输出流。
Java高级程序设计 I/O输入输出流
8.3 File类
? 注意:
– Java能正确处理 UNIX和 Windows/DOS约定路径分
隔符。如果在 Windows版本的 Java下用斜线( /),
路径处理依然正确。记住,如果你用
Windows/DOS使用反斜线( \)的约定,你需要在
字符串内使用它的转义序列( \\)。 Java约定是用
UNIX和 URL风格的斜线来作路径分隔符。
Java高级程序设计 I/O输入输出流
8.4 InputStream 和
OutputStream
? FileInputStream
– FileInputStream是 InputStream类的子类。常用的
构造方法如下:
? FileInputStream(String name) 使用指定的文件名
name创建一个 FileInputStream的对象,如果文件不存在
会产生 FileNotFoundException。
? FileInputStream(File file) 使用指定的文件对象来创建
一个 FileInputStream的对象,如果文件不存在会产生
FileNotFoundException。
Java高级程序设计 I/O输入输出流
8.4 InputStream 和
OutputStream
– 下面的例子创建了两个使用同样磁盘文件且各含一
个上述构造方法的 FileInputStream对象:
FileInputStream f1 = new FileInputStream("hello,txt")
File f = new File("hello,txt ");
FileInputStream f2 = new FileInputStream(f);
? 尽管第一个构造方法可能更常用到,第二个构造方法允
许在把文件赋给输入流之前用 File对象的方法更进一步检
查文件,例如判断文件是否存在。
Java高级程序设计 I/O输入输出流
8.4 InputStream 和
OutputStream
– FileInputStream的常用方法:
? int read( )如果下一个字节可读则返回一个整型,遇到文
件尾时返回 -1
? int read(byte buffer[ ])试图读取 buffer.length个字节到
buffer中,并返回实际成功读取的字节数。遇到文件尾时
返回 -1
? int read(byte buffer[ ],int offset,int numBytes)试图
读取 buffer中从 buffer[offset]开始的 numBytes个字节,返
回实际读取的字节数。遇到文件尾时返回 -1
? void close( )关闭输入源。关闭之后的读取会产生
IOException异常
Java高级程序设计 I/O输入输出流
8.4 InputStream 和
OutputStream
? FileOutputStream
– FileOutputStream是 OutputStream类的子类。常用
的构造方法如下:
? FileOutputStream(String name) 使用指定的文件名
name创建一个 FileInputStream的对象。
? FileOutputStream(File file) 使用指定的文件对象来创
建一个 FileInputStream的对象。
– FileOutputStream的创建不依赖于文件是否存在。
在创建对象时 FileOutputStream在打开输出文件之
前创建它。
Java高级程序设计 I/O输入输出流
8.4 InputStream 和
OutputStream
– FileOutputStream的常用方法:
? void close( )关闭输出流。关闭后的写操作会产生
IOException异常
? void flush( ) 刷新输出缓冲区
? void write(int b)向输出流写入单个字节。注意参数是
一个整型数,它允许你不必把参数转换成字节型就可以
调用 write( )
? void write(byte buffer[ ])向一个输出流写一个完整的
字节数组
? void write(byte buffer[ ],int offset,int numBytes)
写数组 buffer以 buffer[offset]为起点的 numBytes个字节区
域内的内容
Java高级程序设计 I/O输入输出流
8.5 Reader和 Writer
? 字符流为 基于字符 的输入输出处理提供了丰富
的功能,而 Reader和 Writer是所有字符流的基
类。 Reader和 Writer都是 抽象类,它们定义了
字符流的一些常用方法(见书表 8-5、表 8-6)。
Java高级程序设计 I/O输入输出流
8.5 Reader和 Writer
? FileReader
– FileReader类是 Reader类的子类,它可以对文件进
行读取。常用的构造方法如下:
? FileReader(String name) 使用指定的文件名 name创
建一个 FileReader的对象,如果文件不存在会产生
FileNotFoundException。
? FileReader(File file) 使用指定的文件对象来创建一个
FileReader的对象,如果文件不存在会产生
FileNotFoundException。
– FileReader常用的方法参考 Reader类。
Java高级程序设计 I/O输入输出流
8.5 Reader和 Writer
? FileWriter
– FileWriter类是 Writer类的子类,它可以对文件进行
写入。它常用的构造方法如下:
? FileWriter(String name) 使用指定的文件名 name创建
一个 FileWriter的对象。
? FileWriter(File file) 使用指定的文件对象 file创建一个
FileWriter的对象。
– FileWriter类的创建不依赖于文件存在与否。在创建
文件之前,FileWriter将在创建对象时打开它来作为
输出 。
Java高级程序设计 I/O输入输出流
8.6 RandomAccessFile类
? RandomAccessFile类
– 有时候必须对文件的某些部分进行读取或者写入的
操作,也就是进行随机存取,即读写文件的位置要
能够在文件中随意的移动。而我们前面提到的输入
输出流都只能对文件进行顺序的读写,当要对文件
进行随机存取的时候我们使用 RandomAccessFile
类来进行处理。
Java高级程序设计 I/O输入输出流
8.6 RandomAccessFile类
? 类 RandomAccessFile的声明为:
public class RandomAccessFile extends Object
implements DataInput,DataOutput
– 接口 DataInput 中定义的方法主要包括从流中读取基本类型
的数据、读取一行数据、或者读取指定长度的字节数。如:
readBoolean( ),readInt( ),readLine( ),readFully( ) 等。
接口 DataOutput 中定义的方法主要是向流中写入基本类型
的数据、或者写入一定长度的字节数组。如,writeChar( )、
writeDouble( ),write( ) 等。
– 注意,RandomAccessFile可对文件实现读和写两种操作 。
Java高级程序设计 I/O输入输出流
8.6 RandomAccessFile类
? RandomAccessFile类的常用构造方法:
– RandomAccessFile(String name,String
mode) name是文件名,mode是打开方式,例如
,r”表示只读,,rw”表示可读写。
– RandomAccessFile(File file,String mode)
file是文件对象,mode 是打开方式,例如,r”表示
只读,,rw”表示可读写。
Java高级程序设计 I/O输入输出流
8.6 RandomAccessFile类
? RandomAccessFile类操作文件指针的常用方法:
– long getFilePointer( ) 用于得到当前的文件指针
– void seek(long pos) 用于移动文件指针到指定
的位置,调用 seek( )方法后,接下来的读或写操作
将在文件的新位置发生
– int skipBytes(int n) 使文件指针向前移动指定
的 n个字节
Java高级程序设计 I/O输入输出流
8.7 PipedInputSream
和 PipedOutputStream
? 管道流
– 管道流不同于 I/O流和网络流,它的本质是内存中的
一块存储数据的结构体。如果写线程当且仅当管道
满的时候会阻塞,读线程当且仅当管道空的时候会
阻塞。
– 管道流,用于线程间的通信 。要使管道流有用,必
须同时构造管道输入流和管道输出流。
Java高级程序设计 I/O输入输出流
8.7 PipedInputSream
和 PipedOutputStream
– Java为这种管道概念提供了 PipedInputStream和
PipedOutputStream类。将这两者结合在一起,它
们允许一个 Java组件输出数据到输出流,而另一个
组件将这个输出流当作输入流来读取。 管道输入流
和输出流必须连接才能实现数据的流动。
Java高级程序设计 I/O输入输出流
8.7 PipedInputSream
和 PipedOutputStream
? 管道输入流的构造方法为:
? public PipedInputStream( ) 创建一个没有连接输出流
的输入流。
? public PipedInputStream(PipedOutputStream src)
构造一个连接参数指定的输出流的输入流。
? 管道输出流的构造方法为,
? public PipedOutputStream( ) 创建一个没有连接输入
流的输出流。
? public PipedOutputStream(PipedInputStream snk)
创建一个连接由参数指定的输入流的输出流
Java高级程序设计 I/O输入输出流
8.8 过滤流与节点流
? 过滤流与节点流
– 根据流的建立方式和工作原理,将流分为:节点流
( Node Streams)直接建立在输入、输出媒体上。
过滤流( Filter Streams),过滤流必须以某一个节
点流作为流的来源,可以在读 /写数据的同时对数据
进行处理。
Java高级程序设计 I/O输入输出流
8.8 过滤流与节点流
? 过滤流必须建立在节点流之上,对节点流中的
数据进行某些加工、处理,并提供一些友好的
方法供用户进行输入、输出操作以及流控制。
? 我们前面学习过的 FileReader,FileWriter、
FileInputStream,FileOutputStream对文件进
行直接的操作,属于节点流。。
Java高级程序设计 I/O输入输出流
BufferedInputStream和
BufferedOutputStream
? Java中的 InputStream类对流数据进行封装的时
候是不具备缓冲功能的,由于数据的传输速度
远小于处理器的运算速度,会造成处理器的浪
费。因此,Java语言提供了 BufferedInputStream
这个过滤流来封装 InputStream节点流,对流数
据增加了带缓冲的封装来提高数据处理的性能。
同样的提供了 BufferedOutputStream来提高
OutputStream类的数据处理性能。
Java高级程序设计 I/O输入输出流
BufferedInputStream和
BufferedOutputStream
? BufferedInputStream类
– 常用的构造方法:
? public BufferedInputStream(InputStream in)
? public BufferedInputStream(InputStream in,int size)
? 两种构造方法都是为某种输入流 in创建一个新的缓冲流,方法一创建
的缓冲大小为缺省值( 32 bytes),方法二则由用户指定缓冲区大小,
在性能优化时,通常都把 size的值设定为内存页大小或 I/O块大小的
整数倍。
– 在 I/O量不大时,该类所起作用不是很明显;但当程序 I/O量
很大,且对程序效率要求很高时,使用该类就能大大提高程
序的效率。
Java高级程序设计 I/O输入输出流
BufferedInputStream和
BufferedOutputStream
? BufferedOutputStream类
– 常用的构造方法:
? public BufferedOutputStream(OutputStream out)
? public BufferedOutputStream(OutputStream
out,int size)
? BufferedOutputStream的两种构造方法的用法与
BufferedInputStream的两种构造方法的用法类似。
Java高级程序设计 I/O输入输出流
DataInputStream和
DataOutputStream
? 在使用 Java语言进行编程时,常常需要对除了
二进制文件和使用文本文件外的基于 Data的数
据操作,这里的 Data指的是 Java的基本数据类
型和 String。基本数据类型包括 byte,int,char、
long,float,double,boolean和 short。使用前
面提到的 InputStream和 OutputStream对这些
数据 进行处理将会非常的麻烦,Java语言提供
了 DataInputStream和 DataOutputStream基本数据
类型进行操作。
Java高级程序设计 I/O输入输出流
DataInputStream和
DataOutputStream
– DataInputStream和 DataOutputStream的构造方法
的基本结构为:
? DataInputStream(节点流对象)
? DataInputStream(其它过滤流对象)
– 在 DataInputStream和 DataOutputStream两个类中
的方法都很简单,基本结构为 readXXXX( )和
writeXXXX( )其中 XXXX代表基本数据类型或者
String 。
Java高级程序设计 I/O输入输出流
常用的流分类
Java高级程序设计 I/O输入输出流
小结
? 掌握:
– 各种输入输出流在 Java编程中的运用
? 理解:
– 流的基本概念
– 流的分类
? 了解:
– 中文字符在流传输过程中的转换