Java 写入操作 io_append io_write
Java Write Operation io_append io_write
我正在尝试弄清楚 java 如何将字节写入磁盘。
如果我查看 Randomaccesfile 实现,它有
声明了一个本地方法,并在调用 write(byte[]) 时调用该本地方法写入磁盘。
private native void writeBytes(byte b[], int off, int len) throws IOException;
public void write(byte b[]) throws IOException {
writeBytes(b, 0, b.length);
}
我在 OpenJDK 中搜索了 writeBytes 并在 io_util.c
中找到了它
这里的函数 IO_Append(fd, buf+off, len);
和 IO_Write(fd, buf+off, len);
被调用。
可以在 io_util_md.h
中的 JDK 中为 Windows 和 Solaris 找到这些函数
/*
* Route the routines
*/
#define IO_Sync fsync
#define IO_Read handleRead
#define IO_Write handleWrite
#define IO_Append handleWrite
#define IO_Available handleAvailable
#define IO_SetLength handleSetLength
为什么我找不到 Linux 的相同内容?io_append
和 io_write
实际上做了什么?我找不到它们是如何实现的。
似乎 Solaris 和 Linux 共享以下所有内容的本机代码库
http://hg.openjdk.java.net/jdk7/jdk7/jdk/
io_util_md.h 定义(对于 Solaris 和 Linux)
#define IO_Append JVM_Write
#define IO_Write JVM_Write
现在 JVM_Write
在热点代码库中定义,在 jvm.cpp:
JVM_LEAF(jint, JVM_Write(jint fd, char *buf, jint nbytes))
JVMWrapper2("JVM_Write (0x%x)", fd);
//%note jvm_r6
return (jint)os::write(fd, buf, nbytes);
JVM_END
调用 OS 依赖写入函数。 Linux 实现在 os_linux.inline.hpp
inline size_t os::write(int fd, const void *buf, unsigned int nBytes) {
size_t res;
RESTARTABLE((size_t) ::write(fd, buf, (size_t) nBytes), res);
return res;
}
我正在尝试弄清楚 java 如何将字节写入磁盘。
如果我查看 Randomaccesfile 实现,它有 声明了一个本地方法,并在调用 write(byte[]) 时调用该本地方法写入磁盘。
private native void writeBytes(byte b[], int off, int len) throws IOException;
public void write(byte b[]) throws IOException {
writeBytes(b, 0, b.length);
}
我在 OpenJDK 中搜索了 writeBytes 并在 io_util.c
中找到了它
这里的函数 IO_Append(fd, buf+off, len);
和 IO_Write(fd, buf+off, len);
被调用。
可以在 io_util_md.h
中的 JDK 中为 Windows 和 Solaris 找到这些函数/*
* Route the routines
*/
#define IO_Sync fsync
#define IO_Read handleRead
#define IO_Write handleWrite
#define IO_Append handleWrite
#define IO_Available handleAvailable
#define IO_SetLength handleSetLength
为什么我找不到 Linux 的相同内容?io_append
和 io_write
实际上做了什么?我找不到它们是如何实现的。
似乎 Solaris 和 Linux 共享以下所有内容的本机代码库 http://hg.openjdk.java.net/jdk7/jdk7/jdk/
io_util_md.h 定义(对于 Solaris 和 Linux)
#define IO_Append JVM_Write
#define IO_Write JVM_Write
现在 JVM_Write
在热点代码库中定义,在 jvm.cpp:
JVM_LEAF(jint, JVM_Write(jint fd, char *buf, jint nbytes))
JVMWrapper2("JVM_Write (0x%x)", fd);
//%note jvm_r6
return (jint)os::write(fd, buf, nbytes);
JVM_END
调用 OS 依赖写入函数。 Linux 实现在 os_linux.inline.hpp
inline size_t os::write(int fd, const void *buf, unsigned int nBytes) {
size_t res;
RESTARTABLE((size_t) ::write(fd, buf, (size_t) nBytes), res);
return res;
}