第八章——IO输入输出

xiaoxiao2025-08-03  36

1.java流式输入/输出原理 在java程序中,对于数据的流入/输出操作以“流”(stream)方式进行;J2SDK提供了各种各样的“流”类,用以获取不同种类的数据;程序中通过标准的方法输入或输出数据。

2.java流类的分类 (1)java.io 包中定义了多个流类型(类或抽象)来实现输入/输出功能;可以从不同的角度对其进行分类: (a)按数据流的方向不同可以分为输入流和输出流。(从程序角度看) (b)按处理数据单位不同可以分为字节流和字符流。 (c)按照功能不同可以分为节点流和处理流。 (2)J2DSK所提供的所有流类型位于包java.io内都分别继承自以下四种抽象类型。

字节流字符流输入流InputStreamReader输出流OutputStreamWriter

3.输入/输出流类 (1)InputStream 继承InputStream的流都是用于向程序中输入数据,且数据的单位为字节(8bit);下图中深色为节点流,浅色为处理流。 基本方法: //读取一个字节并以整个整数的形式返回(0-255) //如果返回-1已到输入流末尾 int read() throws IOException

//读取一系列字节并储存到一个数组buffer //返回实际读取的字节数,如果读取前已到输入流的末尾,返回-1 int read(byte[] buffer) throws IOException

//读取length个字节 //并储存到一个字节数组buffer,从length位置开始 //返回实际读取的字节数,如果读取前以到输入流的末尾,返回-1 int read(byte[] buffer,int offset,int length) throws IOException

//关闭流释放内存资源 viod close() throws IOException

//跳过n个字节不读,返回实际跳过的字节数 long skip(long n) throws IOException

(2)OutputStream 继承自OutputStream的流是用于程序中输出数据,且数据的单位为字节(8bit);下图中深色为节点流,浅色为处理流。 基本方法: //向输出流中写入一个字节数据,该字节数据为参数b的低8位 int write(int b) throws IOException

//将一个字节类型的数组中的数据写入输出流 int write(byte[] b) throws IOException

//将一个字节类型的数组中从指定位置(offset)开始的 //length个字节写入到输出流 int write(byte[] b,int offset,int length) throws IOException

//关闭流释放内存资源(写close方法前先写flush方法) viod close() throws IOException

//将输出流中缓冲的数据全部写出到目的地 viod flush() throws IOException

(3)Reader 继承自Reader的流是用于程序中输入数据,且数据的单位为字符(16bit);下图中深色为节点流,浅色为处理流。 基本方法: //读取一个字符并以整个整数的形式返回(0-255) //如果返回-1已到输入流末尾 int read() throws IOException

//读取一系列字符并储存到一个数组buffer //返回实际读取的字符数,如果读取前已到输入流的末尾,返回-1 int read(char[] buffer) throws IOException

//读取length个字符 //并存储到一个数组buffer,从length位置开始 //返回实际读取的字符数,如果读取前以到输入流的末尾,返回-1 int read(char[] cbuf,int offset,int length) throws IOException

//关闭流释放内存资源 viod close() throws IOException

//跳过n个字节不读,返回实际跳过的字节数 long skip(long n) throws IOException

(4)Writer 继承自Writer的流是用于程序中输出数据,且数据的单位为字符(16bit);下图中深色为节点流,浅色为处理流。 基本方法: //向输出流中写入一个字符数据,该字符数据为参数b的低16位 void write(int b) throws IOException

//将一个字符类型的数组中的数据写入输出流 void write(char[] cbuffer) throws IOException

//将一个字符类型的数组中从指定位置(offset)开始的 //length个字符写入到输出流 void write(char[] cbuffer,int offset,int length) throws IOException

//将一个字符串中的字符写入到输出流 void write(String string) throws IOException

//将一个字符串从offset开始的length个字符写入到输出流 void write(String string,int offset,int length) throws IOExption

//关闭流释放内存资源(写close方法前先写flush方法) viod close() throws IOException

//将输出流中缓冲的数据全部写出到目的地 viod flush() throws IOException

4.常见的节点流和处理流 (1)节点流可以从一个特定的数据(节点)读写数据(如:文件,内存)。 (2)处理流是“连接”在已存在的流(节点流或处理流)之上,通过对数据的处理为程序提供更为强大的读写功能。

5.文件流 (1)FileInputStream 和 FileOutputStream 分别继承 FileInputStream 和 FileOutputStream用于向文件中输入和输出字节。 (2)FileInputStream 和 FileOutputStream的常用构造方法: FileInputStream(String name) throws FileNotFoundException FileInputStream(File file) throws FileNotFoundException FileOutputStream(String name) throws FileNotFoundException FileOutputStream(File file) throws FileNotFoundException FileOutputStream(File file,boolean append) throws FileNotFoundException

6.缓冲流 (1)缓冲流要“套接”在相应得节点流之上,对读写得数据提供了缓冲得功能,提高了读写得效率。同时增加了一些心得方法。 (2)J2SDK提供了四种缓冲流: (a)缓冲输入流支持其父类得mark和reset方法。 (b)BufferedReader提供了readLine方法用于读取一行字符串(以\r或\n分隔)。 (c)BufferedWriter提供了newLine用于写入一个行分隔符。 (d)对于输出得缓冲流,写出得数据会先在内存中缓存,使用flush方法将会使内存中的数据立刻写出。

7.数据流 (1)DataInputStream和DataOutputStream分别继承自Inputsteam和outputStream,它属于处理流,需要分别“套接”在InputStream和Outputstream类型得节点流上。 (2)DataInputStream和DataOutputStream提供了可以存取与机器无关得Java原始类型数据(如:int,double等)得方法。 (3)DataInputStream和DataOutputStream的构造方法为: (a)DataInputStream(InputStream in) (b)DataOutputStream(OutputStream out)

8.转换流 (1)InputStreamReader和OutputStreamWriter用与字节数据到字符数据之间得转换。 (2)InputStreamReader需要和InputStream"套接"。 (3)OutputStreamWriter需要和OutputStream"套接"。 (4)转换流在构造时可以指定其编码集合,例如: InputStream isr = new InputStreamReader(System.in,“ISO8859_1”)

9.Print流 (1)Printwriter和PrintStream都属于输出流,分别针对于字符和字节。 (2)PrintWriter和PrintStream提供了重载的print. (3)Println方法用于多种数据类型的输出。 (4)PrintWriter和PrintStream的输出操作不会抛出异常,用户通过检测错误状态获取错误信息。 (5)PrintWriter和PrintStream有自动flush功能。

10.Object流 (1)直接将Object写入或读出 (2)transient关键字(透明的) (3)serializable接口 (4)externalizable接口

转载请注明原文地址: https://www.6miu.com/read-5034229.html

最新回复(0)