Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java写入操作io_追加io_写入_Java_Openjdk_Randomaccessfile_Hdd - Fatal编程技术网

Java写入操作io_追加io_写入

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的这些函数 /* *

我想弄清楚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的这些函数

/*
* 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;
}