标签:
返回int ,且范围为0到255间int值 ,从输入流读取下一个数据字节,它是以字节为单位来读的,即每次只读取一个字节内容 ,读取后面三前面补三个字节的0,这样读取出来的结果就永远为正,且为0到255间的数。如果因已到达流末尾而没有可用的字节,则返回值-1 。用于进制文件的读取。
如果我们读取的是二进制文件,如图片声音文件时,我们应该使用如下两种方式来读取:
第一种 :
还是使用InputStream.read(),方法来读取,只不过我们把int型强制转换byte型即可,这样在转换的过程中,会丢弃前三个字节所补的
零,最终得到从流中读取的真实的编码。但如果这样直接通过read()方法读取,而不是通过read(byte[]
b)时,我们判断流是否结尾,最好使用available()方法来判断,当然也可以使用直接比较读出的结果是否为-1,但是要注意的是我们不能在读取后强转成byte型后再判断,因为二进制文件有可能有-1的编码。
第二种 :使用InputStream.read(byte[] b)来接收,因为这样不会有byte到int提升的过程,byte数组b里存储的就是真实的编码。如果read(byte[] b)读取到流的尾,则返回-1,所以我们直接判断返回的读取子节数就可知道流是否结束。
将指定的字节写入此输出流。write 的规定是:向输出流写入一个字节。要写入的字节是参数b的八个低位。b 的24个高位将被忽略。此方法能向文件中写入负数编码,即可写入二进制流的文件,如声音、图片等文件。
我们再来看看Reader与Writer字符流相应方法:
Reader.read:读取单个字符。在有可用字符、发生 I/O 错误或者已到达流的末尾前,此方法一直阻塞。范围在 0 到 65535 之间 (0x00-0xffff),实质上读取出来的就是一个char型,即为Unicode编码了。如果已到达流的末尾,则返回 -1
Writer. write(int c):写入单个字符。要写入的字符包含在给定整数值的 16 个低位中,16 高位被忽略。
从上面可以看出是两类字符流,一种是字节流,另一种是字符流,如果我们读取/写 入的是一个二进制文件,则使用字节流InputStream.read/OutputStream.write;如果我们读取/写入的是一个字符文件,则 使用字符流Reader.read/Writer.write会很方便,当然字符流也可以使用字节流来操作,只是在某些情况下不是很方便。
标签:
原文地址:http://www.cnblogs.com/gtaxmjld/p/4224721.html