输入输出流概念

数据流

输入输出(input/output,I/O)技术用于处理设备之间的数据传输,指程序与外部设备或其他计算机进行数据交换的过程,比如读/写文件、网络通信等。针对程序而言,将外部数据(磁盘、光盘等存储设备的数据)读取到程序(内存)中称为输入,将程序(内存)数据输出到磁盘、光盘等存储设备中称之为输出。
Java程序中,对于数据的输入输出操作以“流”(steam)的方式进行。java.io包下提供了各种“流”的类和接口,用以获取不同种类的数据,并通过标准的方法输入或输出数据。Java中的I/O流按数据流的流向不同分为输入流和输出流;按照操作数据单位不同分为字节流和字符流;按流的功能可分为底层的节点流和上层的处理流两类。节点流直接从数据源或目的地读写数据,而处理流不直接到数据源或目的地,而是“连接”在已存在的流(节点流或处理流)之上,通过对数据的处理为程序提供更为强大的读写功能。
Java的输入输出流体系提供了几十个类,下面按照功能将常用流进行分类梳理,如下表所示:

分类字节输入流字节输出流字符输入流字符输出流
抽象父类InputStreamOutputStreamReaderWriter
访问文件FileInputStreamFileOutputStreamFileReaderFileWriter
访问管道PipedInputStreamPipedOutputStreamCharArrayReaderCharArrayWriter
访问字符串StringReaderStringWriter
缓冲流BufferedInputStreamBufferedOutputStreamBufferedReaderBufferedWriter
转换流InputStreamReaderOutputStreamWriter
对象流ObjectInputStreamObjectOutputStream
装饰流FilterInputStreamFilterOutputStreamFilterReaderFilterWriter
打印流PrintStreamPrintWriter
数据过滤流DataInputStreamDataOutputStream

字符流只能读取纯文本文档(txt)。不能读取doc
字节流是万能流。

InputStream和Reader时所有输入流的基类,OutputStream和Writer时所有输出流的基类。InputStream和OutputStream是字节流的抽象父类,以字节位单位进行I/O操作,Reader和Writer是字符流的抽象父类,以字符为单位进行I/O操作。

InputStream类

InputStream用来表示那些从不同数据源产生输入的类,这些数据源包括字节数组(ByteArrayInputStream)、字符串(StringBufferInputStream)、文件(FileInputStream)、管道(PiledInputStream)、流序列(SequenceInputStream)以及网络连接。InputStream类中定义的集中常用的方法。
(1)int read(),从输入流中读取数据的一个字节,返回0-255范围内的int字节值。如果因为已经达到流末尾而没有可用的字节,则返回值为-1.
(2)int read(byte[ ] b),从输入流中将最多b.length个字节的数据读入一个byte数组中,以整数形式返回实际读取的字节数。如果因为已经达到流末尾而没有可用的字节,则返回值为-1.
(3)int read(byte[ ] b,int off,int len),将输入流中最多len个数据字节读入一个byte数组。尝试读取len个字节,但读取的字节也有可能小于该值。以整数形式返回实际读取的字节数。如果因为流位于文件末尾而没有可用的字节,则返回值为-1.
(4)public void close( ) throws IOException,关闭次输入流并释放与该流关联的所有系统资源

OutputStream类

OutputStream表示输出要去往的目标,如字节数组(ByteArrayOutputStream)、文件(FileOutputStream)或者管道(PiledOutputStream)。OutputStream类中定义的集中常用方法:
(1)void write(int b),将指定的字节写入此输出流。要写入的字节是参数b的8个低位,b的24高位将被忽略即写入范围为0-255。
(2)void write(byte [ ] b),将b.length个字节从指定的byte数组写入此输入流。
(3)void write(byte[ ] b,int off,int len),将指定byte数组中从偏移量off开始的len个字节写入此输出流。
(4)public void flush( ) throws IOException,刷新此输出流并强制写出所有缓冲的输出字节,调用此方法指示将这些字节立即写入它们预期的目标。
(5)public void close( ) throws IOException,关闭此输出流并释放与该流关联的所有系统资源。

Reader类

Reader类中定义了以下几个常用的方法:
(1)int read( ),从输入流中读取单个字符。Java采用Unicode编码为每个字符分匹配2字节的存储空间,故reader()方法将返回读取的2字节字符数据的Unicode编码。如果已到达流的末尾,则返回-1。
(2)int read (char[ ] cbuf),从输入流中最多读取cbuf.length个字符的数据,并将其存储在字符数组cbuf中,返回实际读取的字符数。如果已到达流的末尾,则返回-1。
(3)int read( char[ ] cbuf,int off,int len),从输入流中最多读取len个字符的数据,并将其存储在字符数组cbuf中,返回实际读取的字符数。如果已经达流的末尾,则返回-1。
(4)public void close( ) throws IOException,关闭此输入流并释放与该流关联的所有系统资源。

Writer类

Writer类中定义以下几个常用方法:
(1)void writer(int c),将单个指定字符输出到指定的输出流。
(2)void writer(char[ ] cbuf),将字符数组cbuf中的数据输出到指定的输出流。
(3)void writer(char[ ] cbuf,int off,int len),将字符数组cbuf从off位置开始的len个字符输出到指定流。
(4)void writer(String str),将str字符串中的字符输出到指定输出流。
(5)void writer(String str,int off,int len),将str字符串中从off位置开始的len个字符输出到指定输出流。
(6)void flush( ),刷新该流的缓冲。
(7)public void close( ) throws IOException,关闭此输出流并释放与该流关联的所有系统资源。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值