0

我正在阅读有关 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.

这里是源

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

4

2 回答 2

2

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

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

正如 MadProgrammer 在下面的评论中提到的,仅当缓冲区为空时才会调用 Native API:

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

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

于 2013-07-26T05:12:53.357 回答
1

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

于 2013-07-26T05:02:02.207 回答