我正在阅读关于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需要什么?
答案 0 :(得分:2)
到目前为止,我们看到的大多数示例都使用了无缓冲的I / O. 这意味着每个读取或写入请求都由底层操作系统直接处理。 这会使程序的效率降低,因为每个这样的请求经常会触发 磁盘访问,网络活动或其他相对昂贵的操作。
同一文件中的这一陈述可以回答您的问题。本机API是操作系统的API,可用于执行输入/输出任务。您的编程语言是OS之上的一层,用于与这些API交互,并创建缓冲流以有效地使用这些Native API。
正如MadProgrammer在下面的评论中提到的,仅当缓冲区为空时才调用Native API:
1-因为结果在内存中缓冲,并且在内存(或RAM)中没有任何缓冲时需要本机调用来访问硬盘等资源
2-减少开销。原生呼叫是昂贵的操作
答案 1 :(得分:1)
JVM需要调用本机方法来请求操作系统获取 来自文件系统的数据。这适用于所有输入,而不仅仅是 缓冲流。需要使用正确的方法来询问操作 系统将数据放入文件系统。