【问题标题】:FileOutputStream wait for finishing writingFileOutputStream 等待完成写入
【发布时间】:2016-04-05 13:53:34
【问题描述】:

我有很多 byte[] 片段要写入文件,这些片段有点大,我认为字节混合在一起......

有什么方法可以等待 .write(byte[]) 完成他的工作或其他方法来处理这个问题吗? 当我看文件的前半部分是好的,然后当我开始写后半部分时,有一段时间它以前半部分结束......字节数组很好,我测试了它们。 如果您需要任何代码解释,请随时询问。

try (FileOutputStream fos = new FileOutputStream(Main.newFile)) {
        for (int y = 0; y < piecesCount; y++) {
            if (this.myList[y] == 1) {
                fos.write(this.piecesArray.get(y).piece);
                fos.flush();
                System.out.println("Im writing " + y + " piece");
            } else {
                y--;
            }
        }
        fos.close();
    } catch (FileNotFoundException ex) {
    } catch (IOException | InterruptedException ex) {
    }

【问题讨论】:

  • 使用try with resources语句时不需要fos.close()
  • 好的,谢谢你的建议!
  • 我认为您是在说您怀疑对fos.write 的调用不是按顺序发生的。放心,他们是。你可以摆脱那个fos.flush() 电话,它除了减慢速度之外没有任何用处。
  • 我可以肯定地说,你不需要刷新输出流来确保写入字节的顺序。
  • 嗯,flush 并没有真正改变任何东西,只是可能会变慢,@VGR 你是说 fos.write() 在他没有完成他的任务时不可能被调用工作?

标签: java file fileoutputstream writing


【解决方案1】:

好吧,如果piecesCountlongint y 变量可能会溢出并开始写入数组的第一部分。

如果不是这种情况,我在此代码中看不到其他可能导致您所描述的错误。在这种情况下,

中一定有什么事情发生了

piecesArray.get(y).piece

【讨论】:

  • 不,piecesCount 是整数,永远不会超过 1000,所以我认为他不会溢出
猜你喜欢
  • 2013-03-22
  • 1970-01-01
  • 1970-01-01
  • 2023-03-11
  • 1970-01-01
  • 1970-01-01
  • 2022-01-04
  • 2020-08-31
  • 2020-11-16
相关资源
最近更新 更多