我在Java中创建了一个简单的应用程序,它允许我读取文本文件。我有一个字节数组被包装成字节缓冲区:从字节数组中读取两个字节
FileInputStream inputStream = new FileInputStream(name);
FileChannel channel = inputStream.getChannel();
byte[] bArray = new byte[8192];
ByteBuffer byteBuffer = ByteBuffer.wrap(bArray);
int read;
,然后我用一个while循环都要经过文本文件:
while ((read=channel.read(byteBuffer)) != -1)
{
for (int i=0; i<read; i++)
//my code
byteBuffer.clear();
}
我的问题是如何在这个读一个Unicode字符案件。 Unicode字符由2个字节(16位)组成,所以我认为bArray [i]保存第一个(更高)8位,随后的8位是这个字符的第二部分。因此,例如,如果我需要找出这个字符:“#”目前是否在索引i和i + 1上,我可以这样做吗? (二进制表示“#”:0010 0011):
if (bArray[i] == (byte)10 && bArray[i+1] == (byte) 11)
感谢响应
你究竟想要做什么?你为什么要阅读一个如此低级别的文本文件?你甚至知道你正在阅读的文件的编码? –
如果“#”是“0010 0011”,你不应该只是检查'bArray [i] == 0x0'和'bArray [i + 1] == 0x23'吗? Unicode是两个字节,并且由于“#”是标准ASCII字符集的一部分,所以它没有在高位字节中设置任何位,所以它的表示形式是'0000 0000 0010 0011' – jonhopkins
@jonhopkins实际上,由于java不没有一个二进制表示,它应该分别是0x0和0x23 – Jeff