我在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