1.1流的概念:在 Java API 中, 可以从其中读入一个字节序列的对象称做输入流 ,而可以向其中写入一 个字节序列的对象称做输出流 。 这些字节序列的来源地和目的地可以是文件, 而且通常都是文件, 但是也可以是网络连接, 甚至是内存块 抽象类 InputStream 和 OutputStream构成了输入 / 输出( I/O) 类层次结构的基础因为面向字节的流不便于处理以 Unicode 形式存储的信息

所以从抽象类 Reader 和 Writer 中继承出来了一个专门用于处理 Unicode 字符的单独的类层次结构 ,这些类拥有的读入和写出操作都是基于两字节的Unicode 码元的,而不是基于单字节的字符

1.1.1读写字节

InputStream 类有一个抽象方法:abstract int read()

这个方法将读入一个字节, 并返回读入的字节,或者在遇到输入源结尾时返回 -1 在设计具体的输入流类时,必须覆盖这个方法以提供适用的功能,例如, 在 FileInputStream类中.这个方法将从某个文件中读入一个字节而System.in却是从键盘读入信息 InputStream 类还有若干个非抽象的方法,它们可以读入一个字节数组或者跳过大量的字节,这些方法都要调用抽象的 read 方法,因此, 各个子类都只需覆盖这一个方法与此类似, OutputStream 类定义了下面的抽象方法:abstract int write();

它可以向某个输出位置写出一个字节,read 和 write 方法在执行时都将阻塞,直至字节确实被读入或写出,这就意味着如果流不能被立即访问那么当前的线程将被阻塞。这使得在这两个方法等待指定的流变为可用的这段时间里这

使得在这两个方法等待指定的流变为可用的这段时间里。

available 方法使我们可以去检查当前可读入的字节数量,这意味着像下面这样的代码片段就不可能被阻塞:

int bytees = in.available ();

if(bytees>0){

Byte byte[] = new Byte[bytees];

in,read(byte[])

当你完成对流的读写时,应该通过调用 close 方法来关闭它,这个调用会释放掉十分有限的操作系统资源。 如果一个应用程序打开了过多的流而没有关闭, 那么系统资源将被耗尽。

关闭一个输出流的同时还会冲刷用于该输出流的缓冲区,所有被临时置于缓冲区中, 以便用更大的包的形式传递的字符在关闭输出流时都将被送出,特别是, 如果不关闭文件, 那么写出字节的最后一个包可能将永远也得不到传递当然, 我们还可以用 flush 方法来人为地冲刷这些输出,即使某个流类提供了使用原生的 read 和 write 功能的某些具体方法应用系统的程序员还是很少使用它们,因为大家感兴趣的数据可能包含数字、 字符串和对象, 而不是原生字节。Java 提供了众多从基本的 InputStream 和 OutputStream 类导出的类, 这些类使我们可以处理那些以常用格式表示的数据, 而不只是字节

 abstract int read()

从数据中读入一个字节, 并返回该字节。 这个 read 方法在碰到流的结尾时返回 -1

int read(byte[] b)

读入一个字节数组并返回实际读入的字节数或者在碰到流的结尾时返回 -1这个read 方法最多读入 b.length 个字节

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

读入一个字节数组串位于other之前, 返回一个负数; 如果字或者在碰到流的结尾时返回-1

posted @ 2017-04-24 00:02  小拽A  阅读(198)  评论(0编辑  收藏  举报