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

java流缓冲区问题

 
阅读更多

听着张孝祥老师关于缓冲区知识的课,发现还是有一些没有掌握,动手试了一下,果然发现了问题。

先讲一下关于java缓冲区的知识,应用程序和IO设备之间存在一个缓冲区,一般流是没有缓冲区的,但是如果存在缓冲区,就会发现很大的问题。

错误代码如下:为了确保问题发生,我使用了BufferedOutputStream,使得手动构造出了一个缓冲区。



发现什么问题了吗?

因为如果没有缓冲区,应用程序每次IO都要和设备进行通信,效率很低,因此缓冲区为了提高效率,当写入设备时,先写入缓冲区,等到缓冲区有足够多的数据时,就整体写入设备。这就是问题所在,上个例子中,当我们写入hello时,由于hello占用空间很小,所以暂时存放在缓冲区中,后来输入流想要从文件中读取,但是由于文件中没有字节,所以不能读取hello。

这里,解决方法很简单,只要调用out.flush() 或者out.close()即可,这是把缓冲区的数据手动写入文件。

正确代码如下:


接下来又是我遇到的一个例子,这个例子也很明显的反应出缓冲区的问题。


结果是没有向文件写入任何数据,为什么呢?

唯一的错误就在main方法中没有调用out.close(),把数据从缓冲区刷新到文件。因此用完资源即时关闭是很重要的。


分享到:
评论

相关推荐

    利用缓冲区提高Java应用程序的IO性能

    1. **默认Java流**:Java提供了一些内置的流类,如`InputStream`和`OutputStream`,它们没有内置的缓冲机制。在这种模式下,每次I/O操作都需要直接访问磁盘,这会显著降低性能。 2. **手动缓冲**:开发者可以通过...

    实验六 键盘缓冲区问题

    实验六的主题是“键盘缓冲区问题”,这在计算机科学领域是一个关键的概念,特别是在操作系统和输入输出(I/O)处理方面。键盘缓冲区是操作系统中一个临时存储区域,用于存放用户在键盘上输入的数据,直到这些数据被...

    java字符流缓冲区详解

    Java 字符流缓冲区详解 Java 字符流缓冲区是 Java 中用于提高 IO 操作效率的一种机制,它通过在内存中缓存一部分数据,然后批量写入或读取,以提高流的读写效率。在 Java 中,BufferedReader 和 BufferedWriter 是...

    JavaIO实例_字节流_字符流_缓冲流_转换流IODemo

    - 缓冲流是在原始流基础上添加了缓冲区,可以提高数据传输效率。Java提供了`BufferedInputStream`、`BufferedOutputStream`、`BufferedReader`和`BufferedWriter`等类。 - 缓冲流的主要作用是减少磁盘I/O操作的...

    Java IO字符流缓冲区实现原理解析

    Java IO字符流缓冲区实现原理解析 Java IO字符流缓冲区实现原理解析是Java编程语言中的一种重要机制,该机制旨在提高IO操作的效率和性能。缓冲区是Java IO字符流中的一种机制,它可以将数据暂存起来,以便提高读写...

    nio学习demo 处理因缓冲区满导致写入失败问题

    本示例主要关注如何使用NIO解决“沾包”问题以及处理因缓冲区满导致的写入失败问题。首先,我们需要理解这两个问题的背景。 "沾包"问题通常发生在网络通信中,特别是TCP协议中。由于TCP是流式传输,不保留消息边界...

    buffer应用缓冲区

    在计算机科学领域,Buffer(缓冲区)是一种重要的概念,它在数据处理中起着至关重要的作用。Buffer的应用广泛,特别是在网络编程,尤其是Socket编程中,它扮演着数据传输的桥梁角色。本文将深入探讨Buffer的基本原理...

    Java中缓冲区读者与缓冲区写者.pdf

    在Java编程中,缓冲区读者(BufferedReader)和缓冲区写者(BufferedWriter)是处理输入输出流的重要工具,它们提高了I/O操作的效率。这些类位于java.io包中,是字符流处理的一部分,主要用于文本数据的读写。本篇将深入...

    Java字符流和字节流

    在字符流中,缓冲区可以用来暂存待写入的数据,直到缓冲区满或者程序显式调用`flush()`方法时才会将数据实际写入文件。这种方法可以减少磁盘I/O次数,提高程序性能。 **1. 强制清空缓冲区** 若要在不关闭字符流的...

    Java字符流与字节流区别

    Java 流在处理上分为字符流和字节流。字符流处理的单元为 2 个字节的 Unicode 字符,分别操作字符、字符数组或字符串,而字节流处理单元...字符流(一次可以处理一个缓冲区)一次操作比字节流(一次一个字节)效率高。

    Java中缓冲字节流.pdf

    总的来说,Java的缓冲字节流是提高文件I/O性能的有效手段,它们通过内部缓冲区减少了对底层I/O操作的依赖,优化了数据传输效率。在处理大量数据或需要提高程序响应速度的应用场景中,使用缓冲流是非常明智的选择。

    Java流(文件读写操作)

    ### Java流(文件读写操作) #### 一、流的分类 Java中处理文件和数据时,使用流的概念来进行操作。根据不同的标准,流可以分为几种类型。 ##### 1. 按数据流动方向 - **输入流**:主要用于从数据源读取数据。输入...

    IO流 javaio java 流

    - 缓冲字符流(BufferedReader/BufferedWriter):提高读写性能,通过内部缓冲区进行操作。 - 转换流(InputStreamReader/OutputStreamWriter):用于在字节流和字符流之间转换。 3. 处理流: - Filter流:这些...

    Java字节缓冲流原理与用法详解

    Java字节缓冲流是一种基于缓冲区的IO操作模式。缓冲区是一块内存空间,用于临时存储数据。在进行IO操作时,数据首先被写入缓冲区,然后再从缓冲区中读取出来,这样可以减少IO操作的次数,提高性能。 二、...

    java流.rarjava流.rar

    Java流是Java编程语言中处理数据输入和输出的重要机制,它允许程序在内存与外部设备之间,以及程序的不同部分之间高效地传输数据。Java流分为字节流和字符流两大类,字节流处理单个8位字节的数据,而字符流处理...

    Java数据流编程

    它利用了Java提供的缓冲流类`BufferedInputStream`和`BufferedOutputStream`来自动管理缓冲区,使得程序员无需手动管理缓冲区的细节。 ```java import java.io.*; public class BufferStreamCopy { public static...

    java流详细介绍

    ### Java流详细介绍 在Java编程语言中,流(Stream)是一种用于处理输入输出(I/O)操作的基础概念。Java中的流主要分为两大类:字节流(如InputStream和OutputStream)和字符流(如Reader和Writer)。这两种类型的...

    java 输入输出流

    3. **缓冲流**:为了提高性能,Java提供了缓冲流,如`BufferedReader`和`BufferedWriter`,它们在底层字节或字符流之上添加了一个缓冲区,减少了对底层资源的频繁访问。 4. **过滤流**:过滤流是在已存在的流基础上...

    Java流媒体的控制

    Java流媒体控制是Java编程中一个重要的领域,它涉及到数据传输和处理,特别是在音频和视频内容的实时或异步播放中。Java提供了多种流类型,包括字符流、字节流和特殊的音频流,来实现对这些媒体数据的有效操作。下面...

    Java中缓冲字符流.pdf

    在上面的示例中,`BufferedWriter`的`flush()`方法用于强制将缓冲区中的所有数据写入底层流。如果不调用`flush()`,则缓冲区的数据将在关闭流时自动刷新。 3. **效率提升**: 使用缓冲字符流的主要优势在于减少了...

Global site tag (gtag.js) - Google Analytics