有无Buffer的区别
在读字符流的时候会创建一个牛逼的缓冲区,这个缓冲区减少了对字符操作的开销。效率较高
- 不是每次写都调用系统的
write
,而是凑齐xx字节后再调用一次系统的write
,大大减少了系统调用,所以速度更快。
使用输出流之后记得 flush() !!!
使用完流记得关闭!!! close()
InputStream
read()
- 这个方法是对这个流一个一个字节的读,返回的int就是这个字节的int表示方式
read(byte[] b)
- 这个方法是先规定一个数组长度,将这个流中的字节缓冲到数组b中,返回的这个数组中的字节个数,这个缓冲区没有满的话,则返回真实的字节个数,到未尾时都返回-1
read(byte[] b, int off, int len)
- off :数组开始存放byte的位置
- len:数组允许存放的长度
例子:
a.txt内容如下:
abcdefg
代码如下:
InputStream is = null;
byte[] buffer=new byte[10];
char c;
try{
// 文本内容为 ABCDE
is = new FileInputStream("D://test.txt");
// 这个2指的是数据偏移 不是流偏移 将读取的字节添加到字节数组buffer中
is.read(buffer, 2, 3);
// 循环字节数据
for(byte b:buffer){
if(b==0)
// 因为偏移了2个单位,又因为数组默认值为0,所以前面2个单位是没有的
c='-';
else
// 这里是读到的字节
c=(char)b;
System.out.print(c);
}
}catch(Exception e){
e.printStackTrace();
}finally{
if(is!=null)
is.close();
}
控制台输出结果:
--bcd-----