java写文件时可以读该文件吗_java – 当我正在读/写文件时(在操作系统级别)发生了什么?...

从磁板/闪存单元到本地Java变量,单字节读取需要很长的路要走.这是单个字节传输的路径:

>磁性板/闪存单元

>内部硬盘缓冲区

> SATA / IDE总线

> SATA / IDE缓冲区

> PCI / PCI-X总线

>计算机的数据总线

>计算机的RAM通过DMA

> OS Page-cache

> Libc读缓冲区,又称用户空间fopen()读缓冲区

>本地Java变量

出于性能原因,操作系统完成的大部分文件缓冲都保留在页面缓存中,将最近的读写文件内容存储在RAM上.

这意味着Java代码中的每个读写操作都是从本地缓冲区完成的:

FileInputStream fis = new FileInputStream("/home/vz0/F.txt");

// This byte comes from the user space buffer.

int oneByte = fis.read();

页面通常是4KB内存的单个块.每个页面都有一些特殊的标志和属性,其中一个是“脏页面”,这意味着页面有一些未写入物理媒体的修改数据.

一段时间后,当操作系统决定将脏数据刷回磁盘时,它会以相反的方向发送数据.

只要两个不同的进程将数据写入同一文件,结果就是:

>如果文件被锁定,则不可能.第二个进程将无法打开该文件.

>未定义,如果写在文件的同一区域.

>如果在文件的不同区域运行,则预期.

“区域”取决于应用程序使用的内部缓冲区大小.例如,在两兆字节的文件上,两个不同的进程可能会写:

>第一个1kB数据(0; 1024).

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值