【问题标题】:Export ByteBuffer as Little Endian File in Java在 Java 中将 ByteBuffer 导出为 Little Endian 文件
【发布时间】:2013-04-18 08:45:33
【问题描述】:

我想将 ByteBuffer 作为 Little Endian 导出到文件中,但是当我再次读取文件时,我必须将其作为 Big Endian 读取才能获得正确的值。如何以一种可以在创建的文件中读取为 Little Endian 的方式导出 ByteBuffer 并获得正确的值?

    //In the ByteBuffer tgxImageData there are the bytes which I want to export and import again, the ByteBuffer is ordered as little endian


    //export ByteBuffer into File
    FileOutputStream fos = new FileOutputStream(outputfile);            
    tgxImageData.position(0);
    byte[] tgxImageDataByte = new byte[tgxImageData.limit()];
    tgxImageData.get(tgxImageDataByte);         
    fos.write(tgxImageDataByte);            
    fos.close();


    //import File into ByteBuffer
    FileInputStream fis2 = new FileInputStream(outputfile);     
    byte [] arr2 = new byte[(int)outputfile.length()];
    fis2.read(arr2);
    fis2.close();           
    ByteBuffer fileData2 = ByteBuffer.wrap(arr2);


    fileData2.order(ByteOrder.LITTLE_ENDIAN);           
    System.out.println(fileData2.getShort(0));          //Wrong output, but here should be right output
    fileData2.order(ByteOrder.BIG_ENDIAN);          
    System.out.println(fileData2.getShort(0));          //Right output, but here should be wrong output

【问题讨论】:

  • 你用小端序的部分在哪里?我只看到你写一个字节[]。写入 byte[] 的值是否以小端序写入?我猜那会是 tgxImageData 吗?

标签: java import export endianness bytebuffer


【解决方案1】:

这是一个如何将 shorts 写为 little endian 的示例

    FileOutputStream out = new FileOutputStream("test");
    ByteBuffer bbf = ByteBuffer.allocate(4);
    bbf.order(ByteOrder.LITTLE_ENDIAN);
    bbf.putShort((short)1);
    bbf.putShort((short)2);
    out.write(bbf.array());
    out.close();

你需要在你的代码中做类似的事情

【讨论】:

    猜你喜欢
    • 2012-11-13
    • 2022-06-10
    • 1970-01-01
    • 1970-01-01
    • 2017-08-26
    • 2013-06-09
    • 1970-01-01
    • 2011-02-09
    • 2011-06-17
    相关资源
    最近更新 更多