我想知道为什么使用以下代码:
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或其他任何东西。
提前致谢。
答案 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
。但是,如果您只想将字符写入文件,则必须使用其他方法。