1. 程式人生 > >10.1-全棧Java筆記:最全面的IO技術(一)

10.1-全棧Java筆記:最全面的IO技術(一)

java

IO技術

對於任何程序設計語言而言,輸入輸出(Input/Output)系統都是非常核心的功能。程序運行需要數據,數據的獲取往往需要跟外部系統進行通信,外部系統可能是文件、數據庫、其他程序、網絡、IO設備等等。

外部系統比較復雜多變,那麽我們有必要通過某種手段進行抽象、屏蔽外部的差異,從而實現更加便捷的編程。

輸入(Input)指的是:可以讓程序從外部系統獲得數據(核心含義是“讀”,讀取外部數據)。常見的應用:

1) 讀取硬盤上的文件內容到程序。例如:播放器打開一個視頻文件、word打開一個doc文件。

2) 讀取網絡上某個位置內容到程序。例如:瀏覽器中輸入網址後,打開該網址對應的網頁內容;下載網絡上某個網址的文件。

3) 讀取數據庫系統的數據到程序。

4) 讀取某些硬件系統數據到程序。例如:車載電腦讀取雷達掃描信息到程序;溫控系統

輸出(Output)指的是:程序輸出數據給外部系統從而可以操作外部系統(核心含義是“寫”,將數據寫出到外部系統)。常見的應用有:

5) 將數據寫到硬盤中。 例如:我們編輯完一個word文檔後,將內容寫到硬盤上進行保存。

6) 將數據寫到數據庫系統中。例如:我們註冊一個網站會員,實際就是後臺程序向數據庫中寫入一條記錄。

7)將數據寫到某些硬件系統中。例如:導彈系統導航程序將新的路徑輸出到飛控子系統,飛控子系統根據數據修正飛行路徑。

java.io包為我們提供了相關的API,實現了對所有外部系統的輸入輸出操作,這就是我們這章所要學習的技術。

基本概念和IO入門

數據源

數據源data source,提供數據的原始媒介。

常見的:數據庫、文件、其他程序、內存、網絡連接、IO設備。

數據源分為:源設備、目標設備。

源設備:為程序提供數據,一般對應輸入流。

目標設備:程序數據的目的地,一般對應輸出流。

流的概念

數據源就像水箱,流(stream)就像水管中流著的水流,程序就是我們最終的用戶。 流是一個抽象、動態的概念,是一連串連續動態的數據集合。

1 流與源數據源和目標數據源之間的關系

第一個簡單的IO流程序及深入

當程序需要讀取數據源的數據時,就會通過IO流對象開啟一個通向數據源的流,通過這個IO流對象相關方法可以順序讀取流中的數據。

【示例1 通過流對象從一個文件中讀取數據

(只用於測試,不規範的寫法)

import java.io.*;

public class Demo01 {

public static void main(String[] args) {

try {

FileInputStream fis = new FileInputStream("d:/a.txt"); //文件內容是:abc

int s1 = fis.read(); //打印輸入字符a對應的ascii碼值97

int s2 = fis.read(); //打印輸入字符a對應的ascii碼值98

int s3 = fis.read(); //打印輸入字符a對應的ascii碼值99

int s4 = fis.read(); //由於文件內容已經讀取完畢,返回-1

System.out.println(s1);

System.out.println(s2);

System.out.println(s3);

System.out.println(s4);

fis.close();

//流對象使用完,必須關閉!不然,總占用系統資源,最終會造成系統崩潰!

} catch (Exception e) {

e.printStackTrace();

}

}

}

【示例2】通過流對象從一個文件中讀取數據(經典代碼,一定要掌握)

import java.io.*;

public class Demo02 {

public static void main(String[] args) {

FileInputStream fis =null;

try {

fis = new FileInputStream("d:/a.txt"); //內容是:abc

StringBuilder sb = new StringBuilder();

int temp = 0;

while((temp=fis.read())!=-1){

sb.append((char)temp);

}

System.out.println(sb);

} catch (Exception e) {

e.printStackTrace();

}finally{

try{

if(fis!=null){

fis.close();

//流對象,使用完後必須關閉!!這種寫法,保證了即使遇到異常情況,也會關閉流對象。

}

}catch(IOException e){

e.printStackTrace();

}

}

}

}

老鳥建議:

如上代碼是一段非常典型的IO流代碼,其他流對象的使用也基本是同樣的模式!

本節我們先講到這裏,下節我們繼續聊~~





「全棧Java筆記」是一部能幫大家從零到一成長為全棧Java工程師系列筆記。筆者江湖人稱 Mr. G,10年Java研發經驗,曾在神州數碼、航天院某所研發中心從事軟件設計及研發工作,從小白逐漸做到工程師、高級工程師、架構師。精通Java平臺軟件開發,精通JAVAEE,熟悉各種流行開發框架。


筆記包含從淺入深的六大部分:

A-Java入門階段

B-數據庫從入門到精通

C-手刃移動前端和Web前端

D-J2EE從了解到實戰

E-Java高級框架精解

F-Linux和Hadoop




本文出自 “12931675” 博客,請務必保留此出處http://12941675.blog.51cto.com/12931675/1943928

10.1-全棧Java筆記:最全面的IO技術(一)