当I / O缓冲区变空时为什么调用本机API?

时间:2013-07-26 04:56:40

标签: java iostream bufferedreader

我正在阅读关于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 API ?如果是这样,在空缓冲区调用API需要什么?

2 个答案:

答案 0 :(得分:2)

  

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

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

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

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

2-减少开销。原生呼叫是昂贵的操作

答案 1 :(得分:1)

  

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