问:

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个字节的数据
这样就会出问题
顺便说下,如果读的是中文数据的话,用这种读写方式很如意出现乱码的。。。

关于OutputStream的write方法FAQ(from bbs.csdn.net)的更多相关文章

  1. http://bbs.csdn.net/topics/392028373

    博客 学院http://bbs.csdn.net/topics/392028373 下载 GitChat 更多 登录注册   首页 精选版块 论坛牛人 论坛地图 专家问答 我要发贴 论坛帮助     ...

  2. 快速掌握 Android Studio 中 Gradle 的使用方法 [转http://blog.csdn.net/feelang/article/details/41783317]

    Gradle是可以用于Android开发的新一代的 Build System, 也是 Android Studio默认的build工具. Gradle脚本是基于一种JVM语言 -- Groovy,再加 ...

  3. ObjectMapper处理从远程获取的Object对象 (http://bbs.csdn.net/topics/390337813?page=1)这个网址也有讲解

    微服务中从其他服务获取过来的对象,如果从Object强转为自定义的类型会报错,利用ObjectMapper转换. ObjectMapper mapper = new ObjectMapper(); D ...

  4. sql优化系列3(收集来源http://bbs.csdn.net/topics/250004467)

    如何加快查询速度? 1.升级硬件   2.根据查询条件,建立索引,优化索引.优化访问方式,限制结果集的数据量. 3.扩大服务器的内存 4.增加服务器CPU个数 5.对于大的数据库不要设置数据库自动增长 ...

  5. JAVA 静态内部类--转自http://bbs.csdn.net/topics/350021609

    内部类其实并不是非要声明成static的..主要还是要看实际情况决定..静态和非静态有不同的作用.. 引用一篇文章给楼主参考下吧. 在一个类中创建另外一个类,叫做成员内部类.这个成员内部类可以静态的( ...

  6. ThinkPHP实现定时执行任务的两种方法 - 博客频道 - CSDN.NET

    在平常的项目中我们总是会遇到需要将某个方法任务定时执行的问题,定时执行方法任务如果我们拥有服务器的权限,我们可以直接在服务器设置定时任务,例如在Windows的任务计划程序中进行设置,在Linux中编 ...

  7. Stylish: http://bbs.csdn.net/topics/

    [id^=google_ads_], [id^=bd_ad_], #cpro_u2392825, [id^=BAIDU_SSP_], .bbs_top_ad, .csdn-toolbar, #topi ...

  8. php 单线程 (http://bbs.csdn.net/topics/390778072)

    以前想php单线程,网站肯定是用于多人访问的,如果访问量大,那岂不是出现排队问题? apache+php是阻塞型处理,nginx+php是异步非阻塞的,php有进程管理器,fpm fcgi什么的.ph ...

  9. npoi 加密 https://bbs.csdn.net/topics/380226272

    终于解决了,.1.用excel新建一个文件作为模板,可以是空内容,在excel中对文件进行加密,如密码为:12345. 2.在NPOI读取前,调用:Biff8EncryptionKey.Current ...

随机推荐

  1. 隐藏系统EFI分区Z盘

    找到C:\Windows\System32\cmd.exe程序, 右键单击cmd 选择以管理员身份运行, 打开命令提示符,输入以下命令(不区分大小写)DiskPart回车List空格volume回车s ...

  2. Ubuntu14.04配置nginx开机自启动项

    原文: https://www.jianshu.com/p/2e03255cfabb ubuntu配置开机自动启动服务 ---------------------------------------- ...

  3. C# 秒数转日期_由秒数得到日期几天几小时_当前日期时间,转换为秒

    ///<summary> ///由秒数得到日期几天几小时... ///</summary ///<param name="t">秒数</para ...

  4. 【ACM】Largest prime factor

    /*打表把素数能组合的数先设置成相应的位数*/ /* if n equals two and n is No.1 position of prime factors  so four position ...

  5. 运行时权限请求框架easypermissions

    前言 之前使用过AndPermission权限申请库,当开发者执行有权限的代码发生异常时,AndPermission会抓到异常并回调到失败中,这里要注意的是会抓到任何异常,不仅仅是没有权限时的异常. ...

  6. LoadRunner监控Tomcat的几种方法

    通过JConsole监控Tomcat 1.打开tomcat5的bin目录中的catalina.bat文件,在头部注释部分的后面加上: set JAVA_OPTS=%JAVA_OPTS% -Dcom.s ...

  7. Hibernate配置C3P0连接池

    引入C3PO包 在hibernate.cfg.xml文件中配置 <!-- 数据库连接池的使用 --> <!-- 选择使用C3P0连接池 --> <property nam ...

  8. 从1KW条数据中筛选出1W条最大的数

    using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using S ...

  9. java通过CLASSPATH读取包内文件

    读取包内文件,使用的路径一定是相对的classpath路径,比如a,位于包内,此时可以创建读取a的字节流:InputStream in = ReadFile.class.getResourceAsSt ...

  10. swipeRefreshLayout与webview滑动冲突

    遇到这么个bug,webview使用swipeRefreshLayout时,下拉时事件不会被webview捕获,而是执行swipeRefreshLayout的刷新,网上一大堆一大堆的解决办法,都是什么 ...