Java I/O 知识小结

一.  流:

输入流(inputstream): 一个可以读取字节序列的对象;

输出流(outputstream): 一个可以写入字节序列的对象;

 

两大主要基类:

面向单字节:      InputStream   ,   OutputStream   

面向双字节:       Reader        ,   Writer

对应的抽象方法:  read()        ,    write();

说明:

1.双字节的I/O主要面向Unicode编码设计的。

2.abstract  int  read():

该方法读取一个字节,并将结果返回;如果读到结束,返回-1

例如:  FileInputStream read()方法将从文件中读取一个字符返回;

        Sytem.in 是一个预定的InputStream的子类的对象,可以接受键盘的输入;

InputStreamReader的子类可以覆盖read()方法,自定义读入的方式。

3.abstract  void  write():

将字节写入到指定的输出位置。

4. 不论是read方法还是write方法都能阻塞一个线程知道字节被真正地读入或写入。

   这意味着如果不能立即被读取或写入,java就会挂起这个调用的线程。

5. 当完成对一个流的读取或写入后,就应该调用close()进行关闭. 关闭一个输出流也可以用刷新( flush() )输出流占用的缓冲区(即临时存储在缓冲区中等待形成较大数据包后再发送的那些字符)将它们发送出去。

6. 基本的read(), write()

 

Java.io.InputStream 的主要API

Ø  abstract int read()

      读取一个字节的数据并将其返回,当读到流的结尾的时候,返回-1

Ø  int read(byte[] b)

  将数据读到一个字节数组并返回读取的字节的实际数目,当达到流的结尾的时候,返回-1

  最多读取b.length个字节

Ø  int read(byte[] b , int off, len)

  同上,增加条件限制。从数组boff位置开始读取,读取最大长度为len.

long skip(long n)

    在输入流中跳过n个字节。返回实际跳过的字节数(如果到达末尾,返回可能小于n

Ø  int available()

返回可用的未阻塞的字节数

Ø  void  close()

     关闭输入流

    

Java.io.OutputStream 主要API

Ø  abstract  void  write(int n)

   写入一个字节的数据;

Ø  void write(byte[] b)

   写入数组b的数据;

Ø  void write(byte[] b,int off,int len)

   写入数组b中某一范围的数据;

Ø  void close()

   刷新并关闭输出流;

Ø  void flush()

   刷新输出流,即将缓冲区中的所有数据发送到目的地.

 

二. 常用的JAVA I/O

Ø  InputStream :抽象类,是所有字节输入流的超类

子类:

n  ByteArrayInputStream:

把字节数组转换为输入流,把内存中的一个缓冲区作为InputStream  使用

n  FileInputStream:

从文件中读取数据,把一个文件作为InputStream,实现对文件的读取操作

n  PipedInputStream :

连接一个PipedInputStream,实现了pipe的概念,主要在线程中使用

n  SequenceInputStream :

把几个输入流转换为一个输入流,把多个InputStream合并为一个InputStream

n  ObjectInputStream:

对象输入流

n  FilterInputStream :

装饰器,具有扩展其他输入流的功能

Ø  OutputStream:抽象类,是所有字节输出流的超类

子类:

n   ByteArrayOutputStream :

向字节数组(内存的缓冲区)中写数据,把信息存入内存中的一个缓冲区中

n   FileOutputStream :

向文件中写数据,把信息存入文件中

n   PipedInputStream :

向管道中输出数据,PipedInputStream搭配使用,实现了pipe的概念,主要在线程中使用

n   ObjectOutputStream:

对象输出流

n   FilterOutputStream:

装饰器,扩展其他输出流的功能

 

 

Ø  字符流:   (处理字符流最大的问题是进行字符编码的转换)

Reader :  读取字符流的抽象类

  子类:

n  CharArrayReader:

适配器,把字符数组转换为Reader,从字符数组中读取字符,与ByteArrayInputStream对应

n  BufferedReader :

装饰器,为其他的Reader提供缓冲区。

n  LineNumberReader:

装饰器,为其他的Reader提供缓冲区,并且可以跟踪字符输入流中的行号

n  StringReader: 

适配器,把字符串转换为Reader,从字符串中读取字符

n  PipedReader:

连接一个PipedWriter

n  FilterReader:

装饰器,扩展其他的Reader的功能

n  InputStreamReader :

适配器,把InputStream转换为Reader,可以指定数据源的字符编码

n  FileReader:

从文件中读取字符

 

Ø      Writer :   写入字符流的抽象类

子类:

n  CharArrayWriter :

适配器,把字符数组转换为Witer,向字符数组中写字符

n  BufferedWriter;

装饰器,为其他的Writer提供写缓冲区

n  StringWriter:

适配器,把StringBuffer转换为Writer,StringBuffer中写字符

n  PipedWriter:

连接一个PipedReader

n  FilterWriter:

装饰器,扩展其他的Writer的功能

n  PringWriter:

装配器,输出格式化数据

n  OutputStreamWriter:

适配器,把OutputStream 转换Writer ,可以指定数据汇的字符编码

n  FileWriter:

向文件中写字符

 

最后心得,在用I/O的时候,应该先确认好字符的类型,选择适合的I/O,然后确认该类的构造参数。比如BufferInputStream,用来处理防止每次读取时候都得进行写操作,构造参数是InputStream。总之一句话:定字符类型,定构造参数。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值