关于通过ByteBuffer写一个字符的询问

时间:2013-08-11 15:35:15

标签: java io nio bytebuffer

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

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

我在文件(路径)中写了以下结果: \ 00a 。 我曾预料到它会有所不同,比如只有char' a'。 如果我使用CharBuffer而不是将其传递给seeka.write()方法。 我正在对这些类进行一些实验,我知道还有其他方法可以在文件中编写char或其他任何东西。

提前致谢。

1 个答案:

答案 0 :(得分:2)

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

幸运的是,在读取文件时将此Unicode转换回字符是一项相当简单的任务。您可以使用read()中的SeekableByteChannel方法将字节读入ByteBuffer,然后调用asCharBuffer()中的ByteBuffer方法来处理{{1}作为ByteBuffer,它将允许您读取字符。或者,您可以重复调用CharBuffer中的getChar()方法来阅读单个ByteBuffer。但是,如果您只想将字符写入文件,则必须使用其他方法。