java - 将字节数组写入文件。并不总能得到预期的结果

标签 java arrays file byte fileoutputstream

我正在使用 Java 将字节数组写入文件。当我在十六进制编辑器中打开我的文件时,我并不总是看到我期望的字节。这是我的示例代码和输出文件的内容:

public static void main(String[] args) 
{
    File file = new File( "c:\\temp\\file.txt" );
    file.delete();
    FileOutputStream outStream = null;
    try 
    {
        file.createNewFile();
    } catch (IOException e) 
    {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    try 
    {
        outStream = new FileOutputStream( file );
    } catch (FileNotFoundException e) 
    {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    try 
    {
    outStream.write( new byte[] { 0x14, 0x00, 0x1F, 0x50 } );

    } catch (IOException e) 
    {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

当我在十六进制编辑器中打开文件时,我得到 00 9e f3 04 作为内容,而不是我发送的字节。我的结果似乎不一致。有时我会得到预期的结果,有时却没有。


这将输出正确的数据:

outStream.write( new byte[] { 0x14,0x00,0x1F,0x50,(字节)0xE0,0x4F,(字节)0xD0,0x20,(字节)0xEA,0x3A,0x69,0x10,(字节) 0xA2 , (字节) 0xD8, 0x08, 0x00, 0x2B } );

文件内容为:

14 00 1f 50 e0 4f d0 20 ea 3a 69 10 a2 d8 08 00 2b

如果我再向该数组添加一个字节,它就会失败。

outStream.write( new byte[] { 0x14,0x00,0x1F,0x50,(字节)0xE0,0x4F,(字节)0xD0,0x20,(字节)0xEA,0x3A,0x69,0x10,(字节) 0xA2 , (字节) 0xD8, 0x08, 0x00, 0x2B, 0x30 });

现在文件内容是:

14 e5 80 9f e4 bf a0 e2 83 90 e3 ab aa e1 81 a9 ed a2 a2 08 e3 80 ab

我也遇到了这个问题:

outStream.write( new byte[] { 0x4C, 0x00, 0x00, 0x00 } );

文件内容为:

4c 00

最后两个字节没有写入。


outStream.write( new byte[] { 0x4C, 0x00, 0x00, 0x00, 0x01 } );

这将产生预期的结果。文件内容为:

4c 00 00 00 01

我觉得我缺少有关数据写入文件方式的一些基本知识。将字节数组写入文件时如何获得一致的结果?

最佳答案

我准确地编译了您的代码,并在输出文件中得到了预期的结果。我认为您的记事本(或您用来检查文件的任何其他程序)很可能没​​有向您显示您写入的某些字节(例如,我的 Mac 上的 textedit 拒绝显示可能的字节列表) . 如果这正是您使用的方法,我想是其他一些东西(如记事本)失败了,而不是您的代码。 正如您所提到的,有时您会觉得有些字节根本没有写入。也许尝试双胞胎方法 public void write(byte[] b, int off, int len) 可以确保您要键入多少字节。

关于java - 将字节数组写入文件。并不总能得到预期的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17103102/

相关文章:

iphone - 使用数字字符串对数组进行排序

java - 如何在 Android 上使用文件描述符获取文件路径?

java - addActionListener 中的递归?

java - Eclipse 和 Android SDK 停止工作

java - 解码错误时未找到类。可使用 byteArray、byte[] 进行解析

javascript - 数组最大长度不起作用

c - 用C读取txt文件

Java - 覆盖文件的特定部分

java - 在 Swing GUI 中避免循环引用

java - Java 中的 Int 到英语单词