关于OutputStream的write方法FAQ(from bbs.csdn.net)

问:

Java code
?
1
2
3
4
5
6
7
8
9
10
11
FileInputStream fis =  new  FileInputStream( new  File( "C:\\文件1.txt" ));
FileOutputStream fos =  new  FileOutputStream( new  File( "C:\\文件2.txt" ));
 
int  i= 0 ;
byte [] buffer =  new  byte [ 2 ];
while  ((i = fis.read(buffer)) >  0 ) {
     fos.write(buffer,  0 , i);
}
 
fis.close();
fos.close();


“文件1.txt”有1M, 这里我故意将buffer = new byte[2]。
fos.write(buffer, 0, i) 是不是就是说每次将byte[2]的内容写入到“文件2.txt”中?
还请问一下fos.write(buffer, 0, i)中第2个参数0,是什么意思?第2个参数可以是0吗?如果第2个参数总是为0,是不是就会把前面写入的内容覆盖了呢?
api上说的偏移量到底指的什么意思?

write(byte[])和write(byte[],off,len)到底有何区别,那个好一点呢?



答:


第2个参数0代表的是从buffer[0]开始取数据,取到buffer[i-1],因为java得区间基本上都是左闭又开的原则
如果第2个参数总是为0,实际你就每次只往文件中写人buffer[0]这个数据
偏移代表的就是每次写入文件的字节数
write(byte[])和write(byte[],off,len)到底有何区别,那个好一点呢?
区别就是write(byte[])每次都把byte数组中的数据写入了文件,write(byte[],off,len)可以定义写入的字节 数,如果按照你程序的写法,也就是每次写入的是读入的字节数
写程序的时候要用write(byte[],off,len)
举个例子文件1存有15字节的数据
FileInputStream fis = new FileInputStream(new File("C:\\文件1.txt"));
FileOutputStream fos = new FileOutputStream(new File("C:\\文件2.txt"));

int i=0;
byte[] buffer = new byte[10];
while ((i = fis.read(buffer)) > 0) {
    fos.write(buffer );
}

fis.close();
fos.close();
循环到第二次的时候,实际读入的是5个字节的数据,但是往文件而写的时候,却写入了10个字节的数据
这样就会出问题
顺便说下,如果读的是中文数据的话,用这种读写方式很如意出现乱码的。。。

转载于:https://www.cnblogs.com/jinhengyu/p/10258079.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值