![](/img/trans.png)
[英]How to make FileInputStream and FileOutputStream in a java class
[英]How FileInputStream and FileOutputStream Works in Java?
我正在閱讀Java Tutorials Docs中Java中的所有輸入/輸出流。 教程編寫者使用此示例:
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class CopyBytes {
public static void main(String[] args) throws IOException {
FileInputStream in = null;
FileOutputStream out = null;
try {
in = new FileInputStream("xanadu.txt");
out = new FileOutputStream("outagain.txt");
int c;
while ((c = in.read()) != -1) {
out.write(c);
}
} finally {
if (in != null) {
in.close();
}
if (out != null) {
out.close();
}
}
}
}
xanadu.txt文件數據:
In Xanadu did Kubla Khan
A stately pleasure-dome decree:
Where Alph, the sacred river, ran
Through caverns measureless to man
Down to a sunless sea.
輸出到outagain.txt文件:
In Xanadu did Kubla Khan
A stately pleasure-dome decree:
Where Alph, the sacred river, ran
Through caverns measureless to man
Down to a sunless sea.
為什么即使我們正在閱讀字符,作者也會使用int c
?
為什么在條件下使用-1
?
怎么out.write(c);
方法將int
轉換為再次字符?
1:現在我想問為什么作家使用int c? 即使我們正在讀人物。
FileInputStream.read()
以int
返回一個數據字節。 這是有效的,因為一個字節可以表示為int
而不會損失精度。 請參閱此答案以了解為什么返回int
而不是byte
。
2:第二個為什么在條件下使用-1?
到達文件末尾時,返回-1。
3:如何out.write(c); 方法將int轉換為再次字符? 在outagain.txt文件中提供相同的輸出
FileOutputStream.write()
將一個byte參數作為int
。 由於int
跨越多於一個字節的值,因此忽略給定int的24個高位,使其成為字節兼容的值:Java中的int
總是32位 。 通過刪除24個高位,您可以達到8位值,即一個字節。
我建議你仔細閱讀每種方法的Javadocs。 作為參考,他們回答了您的所有問題:
read
:
從輸入流中讀取下一個數據字節。 值字節作為int返回,范圍為0到255.如果沒有字節可用,因為已到達流的末尾,則返回值-1。 此方法將阻塞,直到輸入數據可用,檢測到流的末尾或拋出異常。
write
:
將指定的字節寫入此輸出流。 寫入的一般合同是將一個字節寫入輸出流。 要寫入的字節是參數b的八個低位。 b的24個高位被忽略。
只需閱讀文檔。
這里是read方法docs http://docs.oracle.com/javase/7/docs/api/java/io/FileInputStream.html#read()
public int read()throws IOException從此輸入流中讀取一個數據字節。 如果尚未提供輸入,此方法將阻止。
指定者:在類InputStream中讀取
返回:數據的下一個字節,如果到達文件末尾,則返回-1。
那個int是你的下一組字節數據。 現在,這是答案。
1)當你為一個int賦一個char時,它表示它是int的ascii數。
如果您有興趣,請在此處列出字符及其ascii代碼列表https://www.cs.cmu.edu/~pattis/15-1XX/common/handouts/ascii.html
2)-1如果到達文件的末尾。 所以這是對數據的檢查存在與否。
3)當您向打印編寫器發送ascii代碼時,它會將相應的char打印到文件中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.