【问题标题】:Is there a more elegant way to read four bytes from a ByteBuffer and treat each byte as a char有没有更优雅的方法从 ByteBuffer 读取四个字节并将每个字节视为一个字符
【发布时间】:2023-03-27 04:12:01
【问题描述】:

有没有更优雅的方法从 ByteBuffer 读取四个字节并将每个字节视为一个 char(而不是每对都作为一个 char)然后这个,我相信一定有一个更简洁的方法。

public static String read4Chars(ByteBuffer bytes) throws IOException
    {
        StringBuffer sbuf = new StringBuffer(4);
        for (int i = 0; i < 4; i++) {
            char ch = (char) bytes.get();
            sbuf.append(ch);
        }
        return sbuf.toString();
    }

【问题讨论】:

  • 没有每个字节代表一个ASCII字符

标签: java nio


【解决方案1】:

优雅是相当主观的。你可以试试:

public static String read4Chars(ByteBuffer bytes) throws IOException {
    byte[] b = new byte[4];
    bytes.get(b);
    return new String(b, Charset.forName("ASCII"));
}

【讨论】:

  • 你的解决方案比我的好,它不会破坏从缓冲区消耗字节的副作用,我只是补充一点,你应该在字符串的构造函数中添加字符集:@987654322 @ 只是为了确保结果是 ASCII 而不是默认字符集
  • @morgano 你对字符集是正确的。不应假设平台默认字符集尊重 ASCII :)
  • @dotnov thx 更好,如果我从 byte[] 参数开始,那么会好很多,不幸的是我一直在尝试从字节数组转移到 ByteBuffers
【解决方案2】:

如果您不必“消耗”缓冲区中的字节,您可以尝试:

public static String read4Chars(ByteBuffer bytes) throws IOException {
    byte[] array = bytes.array();
    return String.valueOf((char) array[0])
        + (char) array[0] + (char) array[0] + (char) array[0];
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-24
    • 1970-01-01
    • 2015-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多