【问题标题】:Why native API is called when I/O buffer gets empty?为什么当 I/O 缓冲区变空时调用原生 API?
【发布时间】:2013-07-26 04:56:39
【问题描述】:

我正在阅读有关 Streams 和 I/O 的 java 教程。我遇到了一个声明,上面写着..

Buffered input streams read data from a memory area known as a buffer; the native input API is called only when the buffer is empty. Similarly, buffered output streams write data to a buffer, and the native output API is called only when the buffer is full.

Here is the source

这里为什么只有在缓冲区为空时才调用 Native APIs?如果是这样,在空缓冲区上调用API需要什么?

【问题讨论】:

    标签: java iostream bufferedreader


    【解决方案1】:

    到目前为止,我们看到的大多数示例都使用无缓冲 I/O。 这意味着每个读取或写入请求都由底层操作系统直接处理。 这会使程序的效率大大降低,因为每个这样的请求通常都会触发 磁盘访问、网络活动或其他一些相对昂贵的操作。

    同一文档中的此声明回答了您的问题。本机 API 是 OS 可用于执行输入/输出任务的 OS 的 API。您的编程语言是操作系统之上的一层,用于与这些 API 进行交互,并创建缓冲流以有效地使用这些 Native API。

    正如下面 cmets 中提到的 MadProgrammer,只有在缓冲区为空时才会调用 Native API:

    1- 因为结果缓冲在内存中,当内存(或 RAM)中没有缓冲时,需要本地调用来访问硬盘等资源

    2- 减少开销。本机调用是昂贵的操作

    【讨论】:

    • 为什么只有在缓冲区为空时才调用它们? @关西
    • @MaheshVarma 1- 因为结果缓冲在内存中; 2-减少开销。本机调用是昂贵的操作
    【解决方案2】:

    JVM需要调用native方法请求操作系统获取 来自文件系统的数据。这适用于所有输入,而不仅仅是 缓冲流。本机方法需要询问操作 系统将数据放入文件系统。

    【讨论】:

      猜你喜欢
      • 2015-07-05
      • 1970-01-01
      • 2019-10-26
      • 2015-08-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-20
      • 2012-01-14
      相关资源
      最近更新 更多