【问题标题】:(Java) Write decimal/hex to a file, and not string(Java)将十进制/十六进制写入文件,而不是字符串
【发布时间】:2010-11-26 04:19:21
【问题描述】:

如果我有一个文件,并且我想在其中写入“42”(值,而不是字符串),例如十六进制的 2a,我该怎么做?我希望能够使用类似 outfile.write(42) 或 outfile.write(2a) 的东西,而不是将字符串写入文件。

(我意识到这是一个简单的问题,但我找不到谷歌的答案,可能是因为我不知道正确的搜索词)

【问题讨论】:

    标签: java string decimal hex


    【解决方案1】:

    【讨论】:

    • 这里不需要使用DataOutputStream。
    • 你能解释一下为什么吗?反正我只是说他可以用。:)
    • 如果你想写字节,那么任何OutputStream都可以。只有当您想直接写入 ints/longs/floats/doubles/... 时,您才可以使用 DataOutputStream 为您转换为字节。
    • 我冒昧地更新了链接以指向文档的当前版本。那里有太多指向古代文献的链接;-)
    【解决方案2】:
        OutputStream os = new FileOutputStream(fileName);
        String text = "42";
        byte value = Byte.parseByte(text);
        os.write(value);
        os.close();
    

    【讨论】:

      【解决方案3】:

      如果你只是想写字节,以下就足够了:

      import java.io.*;
      ...
      OutputStream out = new FileOutputStream("MyFile");
      try {
          // Write one byte ...
          out.write((byte) 42);
          // Write multiple bytes ...
          byte[] bytes = ...
          int nosWritten = out.write(bytes, 0, bytes.length);
      
      } finally {
          out.close();
      }
      

      异常处理留给读者练习:-)

      【讨论】:

      • 其实如果你想写整个数组那么“out.write(bytes)”就可以了,你不需要使用3参数版本。
      • @Joachim:我知道。这是一个例子。
      【解决方案4】:

      要写入二进制数据,您需要使用OutputStream(例如FileOutputStream)。

      如果您发现您的数据是以字符串形式写入的,那么您可能正在使用Writer(例如FileWriter 或包裹在FileOutputStream 周围的OutputStreamWriter)。所有名为“*Writer”或“*Reader”的东西都专门处理文本/Strings。如果你想写二进制数据,你会想避免这些。

      如果您想编写不同的数据类型(而不仅仅是简单的bytes),那么您需要查看DataOutputStream

      【讨论】:

      • 啊!只是迟到了一秒。好一个! :)
      • 还有一个有趣的问题:看看提供动态压缩的 java.util.zip.* 类。您可以将它们传递给 DataOutputStream 构造函数并节省大量磁盘 IO
      猜你喜欢
      • 2021-10-27
      • 2013-05-03
      • 1970-01-01
      • 1970-01-01
      • 2014-03-16
      • 2019-07-27
      • 1970-01-01
      • 2018-01-31
      • 2018-01-22
      相关资源
      最近更新 更多