【问题标题】:Java write bytes from Bytebuffer to File in byte formatJava 以字节格式将字节从 Bytebuffer 写入 File
【发布时间】:2017-08-17 00:30:24
【问题描述】:

我正在使用 Android 构建自定义文件创建器应用。我正在尝试将 Bytebuffer 的内容(我创建的自定义类中的 String 成员)写入字节类型的文件。但是,每当我这样做时,我都会以字符串格式获取文件的内容。我尝试了几种替代方法,例如使用 get 方法、BufferedOutputStream 类、ByteArrayOutputStream 类、DataOutputStream、Filechannel 类等。这是我的代码:

ByteBuffer byteBuffer = ByteBuffer.allocate(totalSize);

    byteBuffer.put(hm.getDocID().getBytes());
    byteBuffer.put(hm.getFextension().getBytes());
    byteBuffer.put(hm.getMagic().getBytes());
    byteBuffer.put(hm.getFversion().getBytes());
    byteBuffer.put(hm.getFsize().getBytes());

    byteBuffer.flip();

    byte[] bablock = new byte[byteBuffer.remaining()];

    BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(idHeader));

        bos.write(bablock);
        bos.close();
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

继续在我的 idHeader 文件中获取以下内容:

12345678-1234-1234-1234-123456789abcjpgIDF1.00000166178

这是我所有的字符串连接起来的。我想做的是将与字节相同的内容写入文件,而不是作为人类可读的字符串。我在这里缺少什么?任何帮助表示赞赏。

【问题讨论】:

    标签: java android arrays bytebuffer bytearrayoutputstream


    【解决方案1】:

    因此,您无需构建字符串并从中获取字节数组并将其放入ByteBuffer 并将其写入文件,而是需要直接写入数据。我会摆脱 ByteBuffer 并使用 DataOutputStream 的各种 API 来写入单个字节或整数或其他任何内容。

    完全不清楚您是想将12345678 写为 8 字节还是 4 字节整数,例如,如果没有澄清,就无法进一步帮助您。

    【讨论】:

    • 非常感谢您的快速响应。这个想法是我想在创建的文件中附加一个唯一的文件 ID(即 hm.getDocID().getBytes()),并能够在使用服务器读取文件后检索此类数据。您是否建议将此 id 例如 (12345678-1234-1234-1234-123456789) 写为 8 个字节或 4 个字节?
    • 它不适合 4 或 8 个字节。如果包含连字符,则至少需要 12、14 个。你的问题真的很不清楚。你现在的写作方式到底有什么问题?
    • 使用 DataOutputStream 直接解决了我的问题!对于我这样模糊的问题,我深表歉意。感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 2010-10-15
    • 2013-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-01
    • 2015-07-05
    • 2015-04-28
    相关资源
    最近更新 更多