0

我想知道为什么使用以下代码:

SeekableByteChannel seeka = Files.newByteChannel(path,StandardOpenOption.CREATE,StandardOpenOption.WRITE);
    ByteBuffer src = ByteBuffer.allocate(10);
    src.putChar('a');
    src.flip();
    seeka.write(src);

我在文件(路径)中写入以下结果:\00a。我曾预计它会有所不同,就像只有字符'a'。如果我使用 CharBuffer ,则无法将其传递给该seeka.write()方法。我正在对这些类进行一些实验,我知道还有其他方法可以在文件中写入 char 或其他任何内容。

提前致谢。

4

1 回答 1

2

类中的putChar()方法ByteBuffer将 char 的 Unicode 写入缓冲区。这是 16 位或更多。因此,当您调用时putChar('a'),您将 'a' 的 Unicode 放入缓冲区而不是 char 'a'。当您使用 写入此缓冲区时SeekableByteChannel,您正在将此 unicode 写入文件,因为这是您的缓冲区中的内容。

幸运的是,在读取文件时将此 Unicode 转换回字符是一项相当简单的任务。您可以使用read()in 方法SeekableByteChannel将字节读入 a ByteBuffer,然后调用asCharBuffer()in 方法ByteBufferByteBuffera 视为 a CharBuffer,这将允许您读取字符。或者,您可以重复调用该getChar()方法ByteBuffer以读取单个char. 但是,如果您只想将字符写入文件,则必须采用不同的方法。

于 2013-08-11T16:11:53.103 回答