【问题标题】:Write a number to FileOutputStream after an offset在偏移后将数字写入 FileOutputStream
【发布时间】:2014-02-25 16:36:33
【问题描述】:

我想在某个偏移量后向FileOutputStream 写入一个数字。我写的内容如下:

String t = Integer.toString(num);
output.write(t.getBytes(), OFFSET, t.length());

这是一个好方法,还是有更好的方法?

【问题讨论】:

    标签: java offset fileoutputstream


    【解决方案1】:

    这是一个经典的 XY 问题。您要做的是在特定偏移量处写入 file。指定“FileOutputStream”不是问题的一部分,而是您的错误解决方案的一部分。您应该为此任务使用 RandomAccessFile。

    【讨论】:

    • 确实,RandomAccessFile 更适合这项特殊任务。不过,他似乎想使用 FileOutputStream。
    【解决方案2】:

    您没有正确使用FileOutputStream 类。第一个参数是要写入文件的数组。第二个是您要开始写入的数组的偏移量。第三个是你要写的内容的长度。因此,在您的情况下,如果您使用与 0 不同的偏移量,则会出现越界异常。

    如果您想使用 FileOutputStream 在文件中写入该数字,您可以读取该文件(例如,使用FileInputStream),读取您想要读取的字节数并将它们写入输出流,然后用类似的东西写下那个数字:

    output.write(t.getBytes(),0,t.length);
    

    最后读取输入流的其余部分并将其写入输出流。

    祝你好运。

    【讨论】:

    • 哦,好吧,在偏移量之后我可以用什么来写。我想写一个数字,但不是从文件开头写,我想在说 5 个字符后写。
    • 您需要使用 FileInputStream 读取前 5 个字符(并将它们写入 fileoutputstream),然后写入您的数字,最后将从 fileinputstream 读取的其余内容写入 fileoutputstream。有关更多信息,请参阅本教程:docs.oracle.com/javase/tutorial/essential/io/file.html
    • 谢谢各位大佬,我去看看教程。
    • 如果他使用不为零的偏移量,他不会得到异常。仅当偏移量 加上长度 超出范围时才会发生这种情况。在这种情况下确实会发生这种情况,但这不是您所说的。 “你需要”之后的所有内容只是几种可能的解决方案之一,根本不是“需要”。 -1
    • 我认为“在你的情况下”表达很清楚。此外,他明确要求在 FileOutputStream 中写入一个数字。我将把“你需要表达”改为“你可以”。
    【解决方案3】:

    我找到了与@sirs 评论相对应的解决方案:

        final RandomAccessFile raf = new RandomAccessFile(file, "rw");
        raf.setLength(offset);
        raf.seek(offset);
    
        FileOutputStream fos = new FileOutputStream(raf.getFD()) {
            @Override
            public void close() throws IOException {
                super.close();
                raf.close();
            }
        };
    
        fos.write(myInt);
    

    【讨论】:

      猜你喜欢
      • 2019-09-06
      • 1970-01-01
      • 2015-02-21
      • 1970-01-01
      • 1970-01-01
      • 2021-01-09
      • 2014-01-17
      • 2014-08-15
      • 1970-01-01
      相关资源
      最近更新 更多