当前位置: 首页 > 面试题库 >

FileInputStream和FileOutputStream到同一文件:是否保证read()可以查看“之前”发生的所有write()?

景康安
2023-03-14
问题内容

我正在使用文件作为大数据的缓存。一个线程顺序地对其进行写入,另一个线程顺序地对其进行读取。

我可以确定在Java内存模型方面假设正确的“先发生”关系后,已经确定write()在一个线程中(由)写入的所有数据都可以read()来自另一个线程吗?是否记录了这种行为?

在我的JDK中,FileOutputStream不覆盖flush(),并且OutputStream.flush()为空。这就是为什么我想知道…

有问题的流完全由我完全控制的类所拥有。保证每个流只能由一个线程访问。我的测试表明它可以按预期工作,但是我仍然想知道是否可以保证并记录下来。

另请参阅此相关讨论。


问题答案:

假设您正在使用posix文件系统,则可以。

FileInputStream``FileOutputStream在*
nix上,在内部使用读写系统调用。写文档说明读将看到过去写的结果,

对常规文件执行write()成功返回后:

从该写操作修改的文件中每个字节位置开始的任何成功read()都应返回该位置的write()指定的数据,直到再次修改该字节位置为止。

我很确定Windows上的ntfs将具有相同的read() write()保证。



 类似资料:
  • 我创建了一个内容为“Hello”的文本文件,我试图从文件中读取这些字符,并再次将其写回相同的文件。 我尝试使用调试器来找出问题,调试器显示在while循环的第一次迭代时被分配。然后,我在检查文件内容时一步一步地执行代码,发现在执行语句之后,“hello”关键字就从文件中删除了。 我最初认为这是由于和指向同一个文件,所以为了执行安全,JVM对文件进行了某种程度的“锁定”? 所以我试着交换这两行: 结

  • 做 截断如果它已经存在?令人惊讶的是,Java的API留档没有说。API也不会留档Java7。语言本身的规范对类的语义学没有什么可说的。 我知道 导致附加到文件。但附加和截断并不是唯一的可能性。如果将100个字节写入1000字节的文件,一种可能性是最后900个字节保持原样。

  • 问题内容: 我正在研究Java中的字节码操作/生成,我只是想知道是否有一种简单的方法可以检查字节码。我不想反编译该文件,我想实际查看编译后的字节码。我不需要编辑它。这样做的任何链接或程序都是可以接受的答案。 问题答案: 我一直在研究具有颜色编码字节码输出模式的反编译器(我发现它比javap更具可读性)。它还可以输出Java代码或中间的“字节码AST”。

  • 本文向大家介绍Java使用FileInputStream / FileOutputStream读/写文件,包括了Java使用FileInputStream / FileOutputStream读/写文件的使用技巧和注意事项,需要的朋友参考一下 示例 写入文件test.txt: 从文件test.txt中读取: 请注意,自Java 1.7起引入了try-with-resources语句,这使得读/写操

  • 问题内容: 我正在尝试比较以下结果:(在蚂蚁中) ……对此:(在行家中) …只是发现生成的两个类文件的校验和略有不同,而其余的相同。我认为多线程起了一定的作用,但是在反复尝试后,为这两个选项生成的校验和似乎是一致的。什么可能解释这个结果? 更新: 我使用来检查了一组具有不同校验和的文件,并注意到唯一的区别是: 相对于: 问题答案: 如您所展示的,差异在于生成的常量池,这实际上不是问题,但是令人不安

  • 系统: ios 不发布到线上, 只是本存在本地的html文件, 通过PC微信发到手机微信上, 那么在手机端应该如何解析这个html文件? 如果这个html里面引入了外部的css和js, 那么可能就不单单只是一个html文件了, 传到微信的就可能是一个压缩包, 这种情况下还能解析码?