java中的io条记
当前位置:以往代写 > JAVA 教程 >java中的io条记
2019-06-14

java中的io条记

java中的io条记

副标题#e#

Java流在处理惩罚上分为字符流和字节约。字符流处理惩罚的单位为2个字节的 Unicode 字符,别离操纵字符、字符数组或字符串,而字节约处理惩罚单位为1个字节,操纵字节和字节数组。

Java内用Unicode 编码存储字符,字符流处理惩罚类认真将外部的其他编码的字符流和java内Unicode字符流之间的转换。而类 InputStreamReader和OutputStreamWriter处理惩罚字符流和字节约的转换。字符流(一次可以处理惩罚一个缓冲 区)一次操纵比字节约(一次一个字节)效率高。

( 一 )以字节为导向的 stream—— InputStream/OutputStream

InputStream和OutputStream是两个abstact类,对付字节为导向的 stream 都扩展这两个鸡肋(基类 ^_^ );

1、InputStream

java中的io笔记

1.1

ByteArrayInputStream — 把内存中的一个缓冲区作为 InputStream 利用 . 如利用 http://www.5a520.cn

construct—

(A)ByteArrayInputStream(byte[]) 建设一个新字节 数组输入流( ByteArrayInputStream ),它从指定字节数组中读取数据( 利用 byte 作为其缓冲区数 组)

(B)—ByteArrayInputStream(byte[], int, int) 建设一个新字节数组输入流,它从指定 字节数组中读取数据。

—mark:: 该字节数组未被复制。

1.2

StringBufferInputStream — 把一个 String 工具作为 InputStream .

construct—

StringBufferInputStream(String) 据指定串建设一个读取数据的输入流 串。

注释:不推荐利用 StringBufferInputStream 要领。 此类不能将字符正确的转换为字节。

同 JDK 1.1 版中的雷同,从一个串建设一个流的最佳要领是回收 StringReader 类。

1.3

FileInputStream — 把一个文件作为 InputStream ,实现对文件的读取操纵

construct—

(A)FileInputStream(File name) 建设一个输入文件流,从指定的 File 工具读取数据。

(B)FileInputStream(FileDescriptor) 建设一个输入文件流,从指定的文件描 述器读取数据。

(C)-FileInputStream(String  name) 建设一个输入文件流,从指命名称的文 件读取数据。

method —- read() 从当前输入流中读取一字节数据。

read(byte[]) 将 当前输入流中 b.length 个字节数据读到一个字节数组中。

read(byte[], int, int) 将输入流 中 len 个字节数据读入一个字节数组中。


#p#副标题#e#

1.4

PipedInputStream :实现了 pipe 的观念 ,主要在线程中利用 . 管道输入流是指一个通讯管道的吸收端。

一个线程通过管道输出流发送 数据,而另一个线程通过管道输入流读取数据,这样可实现两个线程间的通讯。

construct—

PipedInputStream() 建设一个管道输入流,它还未与一个管道输出流毗连。

PipedInputStream(PipedOutputStream) 建设一个管道输入流 , 它已毗连到一个管道输出流。

1.5

SequenceInputStream :把多个 InputStream 归并为一个 InputStream . “ 序列输入流”类答允应用措施把几个输入流持续地归并起来,

而且使它们像单个输入流一 样呈现。每个输入流依次被读取,直到达到该流的末端。

然后“序列输入流”类封锁 这个流并自动地切换到下一个输入流。

construct—

SequenceInputStream (Enumeration) 建设一个新的序列输入流,并用指定的输入流的列举值初始化它。

SequenceInputStream(InputStream, InputStream) 建设一个新的序列输入流,初始化为首先 读输入流 s1, 然后读输入流 s2 。

2、OutputSteam  http://www.bt285.cn

java中的io笔记

2.1

ByteArrayOutputStream :把信息存入内存中的一个缓冲区中 . 该类实 现一个以字节数组形式写入数据的输出流。

当数据写入缓冲区时,它自动扩大。用 toByteArray() 和 toString() 能检索数据。

constructor

(A)— ByteArrayOutputStream() 建设一个新的字节数组输出流。

(B)— ByteArrayOutputStream() 建设一个新的字节数组输出流。

(C)— ByteArrayOutputStream(int) 建设一个新的字节数组输 出流,并带有指定巨细字节的缓冲区容量。

toString(String) 按照指定字符编码将缓冲区内容 转换为字符串,并将字节转换为字符。

write(byte[], int, int) 将指定字节数组中从偏移量 off 开始的 len 个字节写入该字节数组输出流。

write(int) 将指定字节写入该字节数组输出流 。

writeTo(OutputStream) 用 out.write(buf, 0, count) 挪用输出流的写要领将该字节数组输 出流的全部内容写入指定的输出流参数。

2.2

FileOutputStream: 文件输出流是向 File 或 FileDescriptor 输出数据的一个输出流。

constructor

(A)FileOutputStream(File  name) 建设一个文件输出流,向指定的 File 工具输出数据。

(B)FileOutputStream (FileDescriptor) 建设一个文件输出流,向指定的文件描写器输出数据。

(C) FileOutputStream(String  name) 建设一个文件输出流,向指命名称的文件输出数据。

(D) FileOutputStream(String, boolean) 用指定系统的文件名,建设一个输出文件。

#p#副标题#e#

2.3

PipedOutputStream: 管道输出流是指一个通讯管道的发送端。 一个线程通过管道输 出流发送数据,

而另一个线程通过管道输入流读取数据,这样可实现两个线程间的通讯。

constructor

(A)PipedOutputStream() 建设一个管道输出流,它还未与一个管道输入流 毗连。

(B)PipedOutputStream(PipedInputStream) 建设一个管道输出流,它已毗连到一个管道 输入流。

( 二 )以字符为导向的 stream Reader/Writer

以 Unicode 字符为导向的 stream ,暗示以 Unicode 字符为单元从 stream 中读取或往 stream 中写入信息。

Reader/Writer 为 abstact 类

以 Unicode 字符为导向的 stream 包罗下面几种范例:

1. Reader

java中的io笔记

1.1

CharArrayReader :与 ByteArrayInputStream 对应此类实现一个可用作字符输入流 的字符缓冲区

constructor

CharArrayReader(char[]) 用指定字符数组建设一个 CharArrayReader 。

CharArrayReader(char[], int, int) 用指定字符数组建设一个 CharArrayReader

1.2

StringReader :与 StringBufferInputStream 对应其源为一个字 符串的字符流。

StringReader(String) 建设一新的串读取者。

1.3

FileReader :与 FileInputStream 对应

1.4

PipedReader :与 PipedInputStream 对应

2.   Writer

java中的io笔记

#p#副标题#e#

2.1 CharArrayWrite :与 ByteArrayOutputStream 对应

2.2 StringWrite :无与之对应的以字节 为导向的 stream

2.3  FileWrite :与 FileOutputStream 对应

2.4  PipedWrite :与 PipedOutputStream 对应

3、两种差异导向的 stream 之间的转换

3.1

InputStreamReader 和 OutputStreamReader :

把一个以字节为导向的 stream 转换成一个以字符为导向的 stream 。

InputStreamReader 类是从字节约到字符流的桥 梁:它读入字节,并按照指定的编码方法,将之转换为字符流。

利用的编码方法大概由名称指定 ,或平台可接管的缺省编码方法。

InputStreamReader 的 read() 要领之一的每次挪用,大概促 使从根基字节输入流中读取一个或多个字节。

为了到达更高效率,思量用 BufferedReader 封装 InputStreamReader ,

BufferedReader in = new BufferedReader(new InputStreamReader (System.in));

譬喻:// 实现从键盘输入一个整数

#p#分页标题#e#

String s = null;

InputStreamReader re = new InputStreamReader(System.in);

BufferedReader br = new BufferedReader(re);

try {

s =  br.readLine();

System.out.println("s= " + Integer.parseInt(s));

br.close();

}

catch (IOException e)

{

e.printStackTrace();

}

catch (NumberFormatException e)// 当应用 措施试图将字符串转换成一种数值范例,但该字符串不能转换为适当名目时,抛出该异常。

{

System.out.println(" 输入的不是数字 ");

}

InputStreamReader(InputStream) 用缺省的字符编码方法,建设一个 InputStreamReader 。

InputStreamReader(InputStream, String) 用已定名的字符编码方法, 建设一个 InputStreamReader 。

OutputStreamWriter 将多个字符写入到一个输出流,按照指定 的字符编码将多个字符转换为字节。

每个 OutputStreamWriter 归并它本身的 CharToByteConverter, 因而是从字符流到字节约的桥梁。

#p#副标题#e#

(三)Java IO的一般利用原则 :

一、按数据来历(去向)分类:

1、是文件:FileInputStream, FileOutputStream, ( 字节约 )FileReader, FileWriter( 字符)

2、是 byte[] :ByteArrayInputStream, ByteArrayOutputStream( 字节约)

3、是 Char[]: CharArrayReader, CharArrayWriter( 字符 流)

4、是 String: StringBufferInputStream, StringBufferOuputStream ( 字节约)StringReader, StringWriter( 字符流)

5、网络数据流:InputStream, OutputStream,( 字 节约)Reader, Writer( 字符流)

二、按是否名目化输出分:

1、要名目化输出:PrintStream, PrintWriter

三、按是否要缓冲分:

1、要缓冲:BufferedInputStream, BufferedOutputStream,( 字节约)BufferedReader, BufferedWriter( 字符流)

四、按数据格 式分:

1、二进制名目(只要不能确定是纯文本的): InputStream, OutputStream 及其所有 带 Stream 竣事的子类

2、纯文本名目(含纯英文与汉字或其他编码方法); Reader, Writer 及其所有带 Reader, Writer 的子类

五、按输入输出分:

1、输入:Reader, InputStream 范例的子类

2、输出:Writer, OutputStream 范例的子类

六、非凡需要 :

1、从 Stream 到 Reader,Writer 的转换类:InputStreamReader, OutputStreamWriter

2、工具输入输出:ObjectInputStream, ObjectOutputStream

3、历程间通信:PipeInputStream, PipeOutputStream, PipeReader, PipeWriter

4、归并输入 :SequenceInputStream

5、更非凡的需要:PushbackInputStream, PushbackReader, LineNumberInputStream, LineNumberReader

抉择利用哪个类以及它的结构历程的一般准则如下 (不思量非凡需要):

首先,思量最原始的数据名目是什么:原则四

第二,是输入照旧 输出:原则五

第三,是否需要转换流:原则六第 1 点

第四,数据来历(去向)是什么:原则一

第五,是否要缓冲:原则三 (出格注明:必然要留意的是 readLine() 是否有界说,有 什么比 read, write 更非凡的输入或输出要领)

第六,是否要名目化输出:原则二

    关键字:

在线提交作业