Java写入操作io_追加io_写入
我想弄清楚java是如何将字节写入磁盘的 如果我看一下Randomaccesfile实现,它有 声明本机方法,并在调用write(字节[])时调用所述本机方法以写入磁盘 randomaccesfile的源代码: 我在OpenJDK中搜索writeBytes,并在Java写入操作io_追加io_写入,java,openjdk,randomaccessfile,hdd,Java,Openjdk,Randomaccessfile,Hdd,我想弄清楚java是如何将字节写入磁盘的 如果我看一下Randomaccesfile实现,它有 声明本机方法,并在调用write(字节[])时调用所述本机方法以写入磁盘 randomaccesfile的源代码: 我在OpenJDK中搜索writeBytes,并在io_util.c 这里的函数IO\u Append(fd、buf+off、len)和IO_写入(fd、buf+off、len) 我们称之为 可以在io_util_md.h中的JDK中找到Windows和Solaris的这些函数 /* *
io_util.c
这里的函数IO\u Append(fd、buf+off、len)代码>和IO_写入(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\u append
和io\u write
实际上做了什么?我找不到它们是如何实现的。似乎Solaris和Linux在以下所有方面都共享本机代码库
定义(适用于Solaris和Linux)
现在,在热点代码库中定义了JVM\u Write
:
调用依赖操作系统的写函数。Linux实现正在进行中
/*
* 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
#define IO_Append JVM_Write
#define IO_Write JVM_Write
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
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;
}