Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 关于通过ByteBuffer写入字符的询问_Java_Io_Nio_Bytebuffer - Fatal编程技术网

Java 关于通过ByteBuffer写入字符的询问

Java 关于通过ByteBuffer写入字符的询问,java,io,nio,bytebuffer,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。

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

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()
方法。 我正在对这些类进行一些实验,我知道还有其他方法可以在文件中写入字符或其他任何内容

提前感谢。

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


幸运的是,在读取文件时将此Unicode转换回字符是一项相当简单的任务。您可以使用
seekablebytechnel
中的
read()。或者,您可以重复调用
ByteBuffer
中的
getChar()
方法来读取单个
char
。然而,如果您希望简单地将字符写入文件,则必须求助于另一种方法

我明白了,用FileOutputStream直接写下仅仅是简单的字节,对吗?没有字节码。。这就是为什么它可以使用FileOutputStream从文件中读取和写入字符。。我说得对吗?PS我知道有FileReader和FileWriter,只是想知道FileInputStream是如何工作的。提前感谢。但是在API中,他们没有提到字节码:将包含给定字符值的两个字节按当前字节顺序写入当前位置的缓冲区,然后将该位置增加两个。@Rollerball是的,如果他不想吸引落选的选票,他应该相应地修改他的答案。