【发布时间】:2015-02-27 02:06:18
【问题描述】:
我一直想知道 java 编译器/解释器如何设法提供字节码/源代码与文件输入和输出之间的交互。
我知道 InputStream 和 OutputStream 是所有文件 i/o 类的超类,但是在阅读它们之后,它们没有提供基本文件交互方法(read() 和 write(byte b))的实现。我最初的想法是,也许编译器会将这些方法转换为仅在这种情况下发生的某些字节码操作(从文件返回一个字节或将一个字节写入文件),但这可能不正确。
如果 Java 被编译成汇编,那么我理解某个指令将被翻译成特定于平台的文件 i/o 代码(例如 cout
谁能赐教?
【问题讨论】:
-
对于内存(字节数组)流、文件输出流或网络流,
write(int)的常见实现是什么?某些操作有native代码,因此并非所有内容都由JVM处理。 -
最终 I/O 确实涉及与运行 JVM 的操作系统交互的特定于平台的本机代码。
-
顺便说一句:对于 NIO(.2) (docs.oracle.com/javase/8/docs/api/java/nio/package-summary.html) 类,
InputStream和OutputStream类不是所有文件 I/O 的超类(但这些实现可能还包含特定于平台的native实现。)