我在this教程中遇到了以下聲明。基於字節和基於字符的InputStream之間的區別
而一個InputStream在時刻返回一個字節,這意味着在0到255之間的值 (或-1,如果流沒有更多的數據), 在時刻返回一個字符讀取器,這意味着一個值介於0和65535之間(或者如果流沒有更多數據,則爲-1 )。
下面是示例代碼 -
Reader reader = new FileReader("c:\\data\\myfile.txt");
int data = reader.read();
while(data != -1){
char dataChar = (char) data;
data = reader.read();
}
爲InputStream中的代碼相似,以及。代替FileReader & Reader;使用FileInputStream和InputStream。 Reader在InputStream流返回字節時返回char。在這兩種情況下,當我使用諸如「Hello World」之類的字符串進行測試時,它一次只讀取一個字符。超過255的值是什麼,我可以用它來查看這些基於字節和基於字符的輸入之間的差異。
工作計劃
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
public class ReaderStream {
public static void main(String[] args) {
String data = "படிகஅமைப்பு";
InputStream input = new ByteArrayInputStream(data.getBytes());
Reader inputStream = new InputStreamReader(input);
try {
int readData = inputStream.read();
while(readData != -1) {
System.out.print((char)readData);
readData = inputStream.read();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("");
input = new ByteArrayInputStream(data.getBytes());
try {
int readData = input.read();
while(readData != -1) {
System.out.print((char)readData);
readData = input.read();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
輸出
படிகஅமைப்பு
பà®à®¿à®à®à®®à¯à®ªà¯à®ªà¯
'Reader'和'InputStream'有不同的用途。請使用方法/類他們的目標! '讀者'<->字符數據,'InputStream' <->原始/二進制數據。隨意在螺絲上使用錘子,但不要抱怨(或者問爲什麼它不起作用)。看文章@nullpointer ...指向。 – sruetti
@sruetti我明白不同之處。我剛剛編寫了這個程序來查看inputstream是否返回0到255的值,而Reader是返回值0到65535的Reader。感謝您的輸入。 –