关于OutputStream的write方法FAQ(from bbs.csdn.net)
2018-01-03 12:00
429 查看
问:
Java code
?
“文件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个字节的数据
这样就会出问题
顺便说下,如果读的是中文数据的话,用这种读写方式很如意出现乱码的。。。
Java code
?
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个字节的数据
这样就会出问题
顺便说下,如果读的是中文数据的话,用这种读写方式很如意出现乱码的。。。
相关文章推荐
- 关于不同平台下的回车换行(from bbs.chinaunix.net)
- 关于primary文件组已满的原因及解决方法总结(from csdn)
- CString 的方法(from:http://blog.csdn.net/lijuwen/archive/2006/03/13/623186.aspx)
- 关于ASP.NET中用Response.Write()方法响应导致页面字体变大的问题
- 关于ASP.NET中用Response.Write()方法响应导致页面字体变大的问题
- 解决silverlight无法卸载的方法 http://write.blog.csdn.net/postlist
- 关于ASP.NET中用Response.Write()方法响应导致页面字体变大的问题
- 关于使用JSONArray.fromObject()方法和引入net.sf.json包所需要的jar包支持
- 关于ASP.net服务器的入侵方法详解
- 关于选用何种ASP.NET设计方法的技巧
- 一起谈.NET技术,ASP.NET MVC验证框架中关于属性标记的通用扩展方法
- 转:微软今年必做三大事(from csdn.net)
- java.io.OutputStream.write(byte[] b, int off, int len)方法实例
- io读取的输入输出,InputStream ,OutputStream 的read(),write()方法的详细介绍
- [转]水晶报表列太多导致设计界面容纳不下的解决方法 [http://blog.csdn.net/lupenda/archive/2005/08/12/452878.aspx]
- 关于委托、事件、处理事件的方法以及.NET
- http://write.blog.csdn.net/postlist
- net 3.5中关于var、初始化、匿名类和扩展方法介绍
- Get Response from Http (Referenced to http://topic.csdn.net/t/20050115/23/3729009.html)