关于OutputStream的write方法FAQ(from bbs.csdn.net)
|
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)的更多相关文章
- http://bbs.csdn.net/topics/392028373
博客 学院http://bbs.csdn.net/topics/392028373 下载 GitChat 更多 登录注册 首页 精选版块 论坛牛人 论坛地图 专家问答 我要发贴 论坛帮助 ...
- 快速掌握 Android Studio 中 Gradle 的使用方法 [转http://blog.csdn.net/feelang/article/details/41783317]
Gradle是可以用于Android开发的新一代的 Build System, 也是 Android Studio默认的build工具. Gradle脚本是基于一种JVM语言 -- Groovy,再加 ...
- ObjectMapper处理从远程获取的Object对象 (http://bbs.csdn.net/topics/390337813?page=1)这个网址也有讲解
微服务中从其他服务获取过来的对象,如果从Object强转为自定义的类型会报错,利用ObjectMapper转换. ObjectMapper mapper = new ObjectMapper(); D ...
- sql优化系列3(收集来源http://bbs.csdn.net/topics/250004467)
如何加快查询速度? 1.升级硬件 2.根据查询条件,建立索引,优化索引.优化访问方式,限制结果集的数据量. 3.扩大服务器的内存 4.增加服务器CPU个数 5.对于大的数据库不要设置数据库自动增长 ...
- JAVA 静态内部类--转自http://bbs.csdn.net/topics/350021609
内部类其实并不是非要声明成static的..主要还是要看实际情况决定..静态和非静态有不同的作用.. 引用一篇文章给楼主参考下吧. 在一个类中创建另外一个类,叫做成员内部类.这个成员内部类可以静态的( ...
- ThinkPHP实现定时执行任务的两种方法 - 博客频道 - CSDN.NET
在平常的项目中我们总是会遇到需要将某个方法任务定时执行的问题,定时执行方法任务如果我们拥有服务器的权限,我们可以直接在服务器设置定时任务,例如在Windows的任务计划程序中进行设置,在Linux中编 ...
- Stylish: http://bbs.csdn.net/topics/
[id^=google_ads_], [id^=bd_ad_], #cpro_u2392825, [id^=BAIDU_SSP_], .bbs_top_ad, .csdn-toolbar, #topi ...
- php 单线程 (http://bbs.csdn.net/topics/390778072)
以前想php单线程,网站肯定是用于多人访问的,如果访问量大,那岂不是出现排队问题? apache+php是阻塞型处理,nginx+php是异步非阻塞的,php有进程管理器,fpm fcgi什么的.ph ...
- npoi 加密 https://bbs.csdn.net/topics/380226272
终于解决了,.1.用excel新建一个文件作为模板,可以是空内容,在excel中对文件进行加密,如密码为:12345. 2.在NPOI读取前,调用:Biff8EncryptionKey.Current ...
随机推荐
- Sense编辑器(Sense Editor)
Sense编辑器(Sense Editor) 学习了:https://blog.csdn.net/AbnerGong/article/details/50776605 Sense是一个方便的控制台,用 ...
- Hibernate从入门到上手(纯java project、Maven版本hibernate)
Hibernate(orm框架)(开放源代码的对象关系映射框架) Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一 ...
- selenium-Getting Started
1.1. Simple Usage If you have installed Selenium Python bindings, you can start using it from Python ...
- linux svn恢复删除的文件夹和文件(转)
我觉得在window下面,查找被删除的svn文件夹和文件是件比较麻烦的事,恢复就更麻烦了.有的时候,命令还是比鼠标要好用的. 下面做一个例子来说明一下,删除和恢复的例子. [root@BlackGho ...
- 关于vector push_back()与其他方式读取数据的效率对比(转)
引言: 在读取大量数据(数组)时,使用vector会尽量保证不会炸空间(MLE),但是相比于scanf的读取方式会慢上不少.但到底效率相差有多大,我们将通过对比测试得到结果. 测试数据:利用srand ...
- Android低功耗蓝牙(BLE)使用详解
代码地址如下:http://www.demodashi.com/demo/13390.html 与普通蓝牙相比,低功耗蓝牙显著降低了能量消耗,允许Android应用程序与具有更严格电源要求的BLE设备 ...
- 《Javascript权威指南》学习笔记之十九--HTML5 DOM新标准---处理文档元信息和管理交互能力
一.了解DOM 1.DOM是Document Object Model的缩写,即文档对象类型,是文档在内存中的表示形式,是一个应用程序接口,定义了文档的逻辑结构以及一套訪问和处理文档的方法. 2.HT ...
- Android Touch事件传递机制引发的血案
尊重原创:http://blog.csdn.net/yuanzeyao/article/details/38942135 关于Android Touch事件传递机制我之前也写过两篇文章,自觉得对Tou ...
- Python中给文件加锁
首先要引入库import fcntl打开一个文件f = open('./test')对该文件加密:fcntl.flock(f, fcntl.LOCK_EX)这样就对文件test加锁了,如果有其他进程要 ...
- Android Studio Note
1.中文乱码 很多同学都安装了Android Studio,但是发现中文是乱码,其实这个很好解决的.在IDE里点击File,选择Settings...快捷键是Ctrl+alt+s 在打开的窗口中,找到 ...