`

IO流丢失字节问题

    博客分类:
  • J2SE
阅读更多

在之前写的一篇文章中从两段代码审视编码能力 , 两段都是对IO流的操作。

这两段代码到底哪段好些呢?

第一段是没有收尾,开了流但不一定被关闭,当然在 JDK7中,关闭流不需要手动去完成了。

第二段看似很好,收尾工作也做了,而且效率好像应该还高些,毕竟可能少调用一次read方 法。

但就是第二段代码有一个严重的问题,就是字节丢失问题。

if(rc < data.length)
break;

这两行,看似提高了效率,但这儿有字节丢失问题。并不是每一次都读一个data数组长度的数据,有时也是读不满的。

所以要注 意一下。

最简洁的处理方法:

while ((bytesRead = inbuf.read(buffer)) != -1) {
				buf.write(buffer, 0, bytesRead);
			}

 

0
0
分享到:
评论

相关推荐

    python中的IO流(csdn)————程序.pdf

    根据数据类型,IO流又可分为字节流和字符流: - 字节流(例如,`'b'`模式):用于处理二进制数据,如图像、音频或视频。在复制这类文件时,可以使用`f.read()`和`f.write()`方法读取和写入字节。 - 字符流(例如,...

    JavaIO字节输出流的总结共6页.pdf.zip

    - Java中的字节流主要由两个基类构成:`java.io.OutputStream`和`java.io.InputStream`。其中,`OutputStream`是所有字节输出流的父类,提供了基本的字节写入方法。 - 字节流主要用于处理二进制数据,如图片、音频...

    java io流学习笔记1

    Java IO流分为字符流和字节流两大类,它们都继承自抽象基类`java.io.InputStream`和`java.io.OutputStream`(字节流)或`java.io.Reader`和`java.io.Writer`(字符流)。字节流处理单个字节的数据,而字符流则处理...

    JavaSe基于IO流的用户管理系统

    Java中的IO流分为字节流(Byte Stream)和字符流(Character Stream),又分为输入流(Input Stream)和输出流(Output Stream)。字节流处理的是8位的字节,而字符流处理的是16位的Unicode字符。输入流用于从源获取...

    C++课件_IO流_二进制文件流操作PPT

    **C++中的IO流与二进制文件流操作** C++是一种强大且灵活的编程语言,其中IO流(Input/Output Stream)系统是处理输入输出的重要组成部分。IO流允许程序与外部设备,如键盘、显示器、文件等进行数据交换。在C++中,...

    JavaSE超市管理系统

    IO流分为字节流和字符流,根据数据流向又可分为输入流和输出流。系统可能使用以下IO流技术: 1. **文件流**:FileInputStream和FileOutputStream用于读写文件,例如读取商品库存文件或保存交易记录。 2. **缓冲流*...

    java-IO流学习使用教程

    Java IO流分为两大类:字节流(Byte Stream)和字符流(Character Stream)。本文将详细介绍字符流的使用,特别是FileReader和FileWriter的使用以及它们在不同场景下的应用。 字符流主要用于处理字符编码的数据,...

    详解Java中字符流与字节流的区别

    根据处理的数据单位,Java提供了两种主要类型的流:字符流和字节流。这两种流在处理数据时有显著的区别,尤其是在处理文本数据和二进制数据时。 1. 什么是流 流在Java中是一个抽象概念,它描述了数据如何从一个地方...

    python IO流(csdn)————程序.pdf

    字节流可以处理任何形式的数据,而字符流仅限于处理字符数据。在处理大文件时,为了避免一次性加载所有数据到内存,通常采用分块读取或写入。 `flush()`函数是另一个有用的工具,它允许我们在不关闭文件的情况下...

    day09-字节缓冲流&字符流1

    与字节流相比,字符流处理字符数据时会考虑到字符编码的问题,避免因编码转换不正确导致的数据丢失或乱码。 2.2 编码表【理解】 编码表,如ASCII、GBK、UTF-8等,是将字符映射到字节序列的规则。在处理字符流时,...

    【HDFS篇05】HDFS客户端操作 --- IO流操作 1

    在HDFS操作中,`IOUtils`简化了流的关闭,避免了可能出现的资源泄露问题。 5. **处理大文件** 当处理大文件时,HDFS客户端通常会自动处理分块,用户不需要手动拼接。然而,在某些情况下,如下载大文件并保存为单一...

    E06_IO复习.pdf

    根据操作的数据不同,IO流分为字节流和字符流。字节流处理字节,适用于任何类型的数据,如图片、音频、视频等非文本文件。字符流处理字符,主要用于文本文件,如`.txt`、`.html`等。根据流向的不同,又可分为输入流...

    完整版Java全套入门培训课件 Java基础 07-IO(共29页).pptx

    Java的IO流可以分为两类:字节流和字符流。字节流主要用于处理二进制数据,如图像、音频或视频文件,而字符流则专门用于处理基于Unicode编码的文本数据。 1. 字节流: - 抽象基类:InputStream和OutputStream,...

    五,Android文件IO详解.doc

    Java IO流分为两大类:字节流(Byte Stream)和字符流(Character Stream)。字节流处理单字节的数据,如InputStream和OutputStream是字节流的父类,分别用于读取和写入字节数据。字符流处理Unicode字符,Reader和...

    流与文件 JAVA文件操作

    字节流处理单个字节的数据,如图像或音频文件,而字符流则处理Unicode字符,更适合文本文件。字节流包括InputStream和OutputStream(用于输入和输出)以及Reader和Writer(处理字符数据)。字符流在字节流的基础上...

    C# 串口通信(彻底解决C#串口通信中的数据丢失问题)

    ### C#串口通信详解与数据丢失问题的解决方法 #### 概述 串口通信是一种常见的设备间数据传输方式,在工业控制、自动化测试等领域应用广泛。然而,在使用C#进行串口通信开发时,很多开发者都遇到过数据丢失的问题...

    行业文档-设计装置-一种基于字节流的进程间通讯方法.zip

    标题中的“行业文档-设计装置-一种基于字节流的进程间通讯方法”指的是一个关于IT领域的技术文档,专门探讨了在操作系统环境下,不同进程如何通过字节流进行通信的技术。这种通信方式是多线程或多进程编程中的一个...

    标准c库的io缓冲区操作图示说明

    fgetc函数可能通过系统调用进入内核读1K字节到IO缓冲区中,然后返回IO缓冲区中的第一个字节给用户,把读写位置指向IO缓冲区中的第二个字符,以后用户再调fgetc,就直接从IO缓冲区中读取,而不需要进内核了,当用户把...

    在STC官方源码基础上的模拟串口多字节收发

    本文将基于STC官方提供的3.1和3.2 IO口、定时器T2及INT4中断,详细讲解如何扩展其源码以支持多字节的收发,并介绍一个侧重于多接收单发送的程序设计。 首先,我们需要理解STC单片机的IO口工作原理。3.1和3.2 IO口...

    commons-fileupload-1.2.1.jar和commons-io-1.3.2.jar

    2. **流操作**:提供了各种读写操作,包括缓冲流、过滤流和转换流,便于处理字节流和字符流。 3. **文件比较**:可以比较两个文件或目录的内容是否相同,甚至可以进行忽略空白和大小写敏感的比较。 4. **文件监听**...

Global site tag (gtag.js) - Google Analytics