java读取文件时在最后的缓冲区内存在多余数据的问题
来源:互联网 发布:unity3d怎么注册 编辑:程序博客网 时间:2024/05/17 06:03
一般用JAVA写文件的方式:
byte[] buffer = new byte[1024];
while (fileIn.read(buffer) != -1)
{
outputStream.write(buffer);
}
但是这样会出现一个问题:如果最后读入buffer的数据只有n个字节,n小于1024个字节时,在buffer的[n,1024]区间存放的是上一次读取的数据,这样写入输出流的时候会导致比原文件要多出(1024-n)个字节。
应该使用如下的方式来写文件:
char[] cbuf = new char[CHAR_BUFFER];
int charsRead = 0 ;
while ((charsRead = br.read(cbuf)) != -1) {
bw.write(cbuf, 0, charsRead);
}
byte[] buffer = new byte[1024];
while (fileIn.read(buffer) != -1)
{
outputStream.write(buffer);
}
但是这样会出现一个问题:如果最后读入buffer的数据只有n个字节,n小于1024个字节时,在buffer的[n,1024]区间存放的是上一次读取的数据,这样写入输出流的时候会导致比原文件要多出(1024-n)个字节。
应该使用如下的方式来写文件:
char[] cbuf = new char[CHAR_BUFFER];
int charsRead = 0 ;
while ((charsRead = br.read(cbuf)) != -1) {
bw.write(cbuf, 0, charsRead);
}
此处的charsRead为每次实际读入的字节或字符数。
InputStream inStream = new FileInputStream(file);
byte[] buf = new byte[4096];
/*创建输出流*/
ServletOutputStream servletOS = response.getOutputStream();
int readLength;
while (((readLength = inStream.read(buf)) != -1)) {
servletOS.write(buf, 0, readLength);
}
inStream.close();
servletOS.flush();
servletOS.close();
- java读取文件时在最后的缓冲区内存在多余数据的问题
- java中读取缓冲流时接受数据不完整的问题
- JAVA读取文件中存在BOM的问题
- java 读取文件的最后若干行
- Java读取文件的最后n位
- java 拼接字符串时,去掉最后一个多余的逗号
- Java拼接字符串时,去掉最后一个多余的逗号
- Java拼接字符串时,去掉最后一个多余的逗号 .
- java 拼接字符串时,去掉最后一个多余的逗号
- c++文件读取最后一行读取两次的问题
- JAVA如何实现读取文件最后一行记录,在文件的结尾追加记录
- 在C++ 重复读取文件中的最后一行的解决办法
- 【C++】C++ 读取文件最后一行产生的问题
- datstage处理文本文件中存在多余换行符的数据
- GPS数据串口接收的数据 是否在一个设定好的检测区内
- java 去掉最后一个多余的字符后返回字符串
- 读取excel文件显示在gridview中数据.字符.数字混合时无法全部读取的问题!
- java缓冲字节流的复制数据,数据以数组读取、写入,效率更高
- windows Server 2003 iis 404错误
- Ubuntu 挂载ISO文件
- V8 学习手册(二)—— hello V8 代码分析与对象添加
- Linux字符设备驱动 - VF(Virtual File) - ver 1
- 远程连接MySQL数据库
- java读取文件时在最后的缓冲区内存在多余数据的问题
- 【网线故障专题】一起网线绝缘不良导致的网速慢、断网的情况
- uva 532 - Dungeon Master
- 回溯算法
- ubuntu拼音修改
- Linux连接无线网的方法
- Intent传递数据时,可以传递哪些类型数据?
- XP系统下硬盘安装Ubuntu
- 【并查集+枚举】杭电 hdu 1598 find the most comfortable road