我曾一度對流的概念管不清楚--什么輸入流、輸出流、read和write等等。
而現在重新去理解這個概念的時候,發現其實並沒有我以前想象那么復雜。
流:
程序和外部設備進行數據傳輸的一個通道。分為輸入流和輸出流。
輸入流(InputStream):
終端設備里的數據傳輸給程序的通道
輸出流(OutStream):
程序的數據傳輸給終端設備的通道
外部設備:
文件、鍵盤、鼠標、屏幕、控制台。。。(有些外部設備只能有輸入流或者輸出流)。
Read:
輸入流通過read把外部設備的數據讀到程序中
Write:
輸出流通過write吧程序中的數據寫到外部設備
流程:
外部設備--->>>輸入流--->>> 程序 --->>>輸出流 --->>>外部設備
舉例(java):
場景:通過程序實現文件的復制,並在復制的文件中加入一些信息。
程序:
public class CopyFile { public byte[] getFile() throws IOException { FileInputStream fileInputStream = null; try { fileInputStream = new FileInputStream("c:\\file.txt"); byte[] result = new byte[fileInputStream.available()]; fileInputStream.read(result); return result; } catch (Exception e) { e.printStackTrace(); } finally { if (fileInputStream != null) { fileInputStream.close(); } } return null; } public void copyFile(byte[] result) throws IOException { FileOutputStream fileOutputStream = null; try { File newFile = new File("c:\\copyFile.txt"); fileOutputStream = new FileOutputStream(newFile); fileOutputStream.write(result); fileOutputStream.write("復制成功了".getBytes()); fileOutputStream.flush(); fileOutputStream.close(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{ if (fileOutputStream != null) { fileOutputStream.close(); } } } public static void main(String[] args) { CopyFile copyFile = new CopyFile(); byte[] result; try { result = copyFile.getFile(); copyFile.copyFile(result); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
分析:
1:通過FileInputStream給文件創建一個輸入流通道
2:通過FileInputStream的read方法,把文件信息讀取到程序中
3:通過File來創建一個副本文件
4:通過FileOutputStream給副本文件創建一個輸出流通道
5:通過FileOutputStream的write方法,給副本文件寫入信息。
總結:
通過輸入流能把外部設備中的數據讀到程序里面
而通過輸出流能把程序中的數據寫入外部設備中。