如何在用Java读写时强制使用UTF-16?

如何在用Java读写时强制使用UTF-16?,java,file-io,character-encoding,utf-16,Java,File Io,Character Encoding,Utf 16,我看到您可以通过charset.forName(“UTF-16”)将UTF-16指定为字符集,并且可以通过charset.forName(“UTF-16”).newDecoder()创建新的UTF-16解码器,但我只看到在InputStreamReader的构造函数上指定CharsetDecoder的功能 如何指定在读取Java中的任何流时使用UTF-16?输入流处理原始字节。当您直接从输入流读取数据时,得到的只是原始字节,其中字符集是不相关的 根据定义,将原始字节解释为字符需要某种翻译:如何将

我看到您可以通过
charset.forName(“UTF-16”)
将UTF-16指定为字符集,并且可以通过
charset.forName(“UTF-16”).newDecoder()
创建新的UTF-16解码器,但我只看到在
InputStreamReader
的构造函数上指定
CharsetDecoder
的功能


如何指定在读取Java中的任何流时使用UTF-16?

输入流处理原始字节。当您直接从输入流读取数据时,得到的只是原始字节,其中字符集是不相关的

根据定义,将原始字节解释为字符需要某种翻译:如何将原始字节转换为可读字符串?“翻译”是以字符集的形式出现的

该“添加”层由读卡器实现。因此,要从流中读取字符(而不是字节),您需要在流的顶部构造某种类型的
读取器
(取决于您的需要)。例如:

InputStream is = ...;
Reader reader = new InputStreamReader(is, Charset.forName("UTF-16"));
这将导致
reader.read()
使用指定的字符集读取字符。如果要读取整行,请使用顶部的
BufferedReader

BufferedReader reader = new BufferedReader(new InputStreamReader(is, Charset.forName("UTF-16")));
String line = reader.readLine();

如果类允许,您可以在字节流和字符流之间的边界处执行此操作。(InputStreamReader就是这样一个类,对于其他没有提供指定字符集选项的阅读器,只需将其环绕在InputStreamReader上即可)。InputStream(字节流)级别的低级构造没有字符集的概念。