`
kingquake21
  • 浏览: 270616 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java读取文件时在最后的缓冲区内存在多余数据的问题

阅读更多
一般用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);
}
此处的charsRead为每次实际读入的字节或字符数。
分享到:
评论

相关推荐

    java源码包---java 源码 大量 实例

     Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、关闭输入流、关闭套接字关闭输出流、输出错误信息等Java编程小技巧。 Java数组倒置...

    缓冲区溢出基础.7z

    当程序试图写入超过缓冲区长度的数据时,多余的数据会"溢出"到缓冲区的边界之外,可能覆盖相邻的内存区域。这包括函数返回地址、堆栈帧的其他部分以及可能的敏感信息。 3. **类型和后果** 缓冲区溢出可以分为两类...

    java源码包3

     Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、关闭输入流、关闭套接字关闭输出流、输出错误信息等Java编程小技巧。 Java数组倒置...

    java源码包2

     Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、关闭输入流、关闭套接字关闭输出流、输出错误信息等Java编程小技巧。 Java数组倒置...

    成百上千个Java 源码DEMO 4(1-4是独立压缩包)

    数据压缩,文件传输 Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、关闭输入流、关闭套接字关闭输出流、输出错误信息等Java编程小技巧...

    java源码包4

     Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、关闭输入流、关闭套接字关闭输出流、输出错误信息等Java编程小技巧。 Java数组倒置...

    Java将文件中的文字显示在控制台上.docx

    本例中,开发者遇到了一个常见问题:当尝试读取包含汉字的文本文件时,输出的内容出现额外的无用字符。这主要是由于对字符流的理解不充分以及对文件长度与字符数量关系的误判导致的。 首先,Java I/O 包提供了多种...

    成百上千个Java 源码DEMO 3(1-4是独立压缩包)

    数据压缩,文件传输 Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、关闭输入流、关闭套接字关闭输出流、输出错误信息等Java编程小技巧...

    浅谈android中数据库的拷贝

    5. **拷贝数据**:通过循环读取输入流的数据并写入输出流,通常使用缓冲区提高效率。 ```java byte[] bs = new byte[1024]; int temp = -1; while ((temp = stream.read(bs)) != -1) { fos.write(bs, 0, temp); } ...

    编译原理词法分析器报告[参照].pdf

    1. 输入源程序文本:首先,词法分析器会读取源代码文件(例如:"in.txt"),通过预处理子程序去除多余的空格、注释,并将处理后的字符序列存储在一个缓冲区中。在这个例子中,缓冲区使用ArrayList类型实现,用于存储...

    2021-2022计算机二级等级考试试题及答案No.10499.docx

    4. 在Java异常处理中,通常将较低级别的异常类catch子句放在前面,因为它们能捕获更具体的异常,而更通用的异常类catch子句则放在后面。 5. "Internet"一词源自英文,指的是全球性的互联网。 6. C语言中的if嵌套...

    嵌入式或LINUX相关研发面试题目

    `gets`函数用于读取一行文本输入,但由于存在安全风险(可能会导致缓冲区溢出),在C99标准之后已经被废弃。使用时需要注意: - 不要使用`gets`,而是使用更安全的替代品,如`fgets`; - 如果确实需要使用`gets`,则...

    The C Cheat Sheet - An Introduction to Programming in C

    - 在不需要的地方使用分号可能会导致编译错误或运行时问题。 - **10.5 `strcmp` 的逆序** - `strcmp`函数的比较结果与预期相反,需要注意。 - **10.6 未终止的注释** - 忘记结束注释可能导致编译错误。 - **10.7 ...

    ehcache技术详解

    - `diskSpoolBufferSizeMB`:磁盘缓存写入操作的缓冲区大小。 - `timeToIdleSeconds`:设置缓存条目闲置多久后会被自动删除。 - `timeToLiveSeconds`:设置缓存条目存活多久后会被自动删除。 - `...

    Projects:文字链

    项目的核心功能是从一个文本文件中读取一系列单词,并将这些单词存储到内存中的缓冲区。这个缓冲区可以理解为一个字典或词库,用于后续的查找操作。用户通过控制台输入一个起始单词和一个结束单词,程序会尝试找到一...

Global site tag (gtag.js) - Google Analytics