IO
InputStream - 字節(jié)流(以字節(jié)為單位進行讀取) - 二進制文件
Reader - 字符流(以字符為單位進行讀取) - 文本文件
OutputStream
Writer
FileWriter構(gòu)造器的第一個參數(shù)是文件名或者文件對象
第二個參數(shù)用來指定是否啟動追加模式(在原來文件的末尾輸出新的內(nèi)容)
try 把可能在運行時出現(xiàn)狀況的代碼放在try塊中保護起來執(zhí)行,如果出現(xiàn)了異常狀況就通過后面的catch來捕獲異常對象并進行相應(yīng)的處理
FileInputStream的構(gòu)造器用throws關(guān)鍵字聲明了FileNotFoundException異常而且該構(gòu)造器的代碼中判定如果文件無效就用throw關(guān)鍵字拋出異常對象
一個try塊后面可以跟多個catch用于捕獲不同的異常類型
但是在書寫上要保證先捕獲子類型異常再捕獲父類型異常
如果捕獲的異常之間沒有父子類關(guān)系 那么捕獲順序隨意
從Java7開始如果多個catch代碼是一致的,可以合并為一個catch打印異常棧軌跡 - 對于調(diào)試程序很有幫助的一個方法
e.printStackTrace();
-總是執(zhí)行代碼塊 - 不管程序正常異常此處都要執(zhí)行
此處最適合釋放程序中打開的各種外部資源(文件、數(shù)據(jù)庫、網(wǎng)絡(luò))
finally {
if(in != null){
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
TWR - try-with-resources
從Java7開始可以使用TWR語法將需要釋放的外部資源直接放在try后的圓括號中
這樣的話不管正常離開還是異常離開try塊 外部資源會直接自動關(guān)閉
實現(xiàn)了AutoCloseable接口的外部資源對象可以使用TWR語法自動關(guān)閉如果頻繁的進行IO操作會使得CPU的利用率非常低下
因為I/O操作會導(dǎo)致CPU產(chǎn)生I/O中斷 CPU不能滿負荷工作
創(chuàng)建一個字節(jié)數(shù)組作為輸入緩沖區(qū) 將文件中的數(shù)據(jù)直接讀入緩沖區(qū)中
這種做法可以減少I/O中斷的次數(shù) 從而保證CPU能夠不被頻繁中斷
byte[] buffer = new byte[4096];
package com.baidu;
import java.util.Comparator;
class Test01 {
//折半查找
//面試題
public static <T extends Comparable<T>> int binarySearch(T[] search,T key){
int start = 0;
int end = search.length - 1;
while(start <= end){
//int mid = (start + end) / 2; // 有溢出的風(fēng)險
//int mid = (end - start) / 2 + start;
int mid = (start + end) >>> 1;
if(search[mid].equals(key)){
return mid;
}
else if(search[mid].compareTo(key) > 0){
end = mid - 1;
}
else{
start = mid + 1;
}
}
return -1;
}
public static <T> int binarySearch(T[] search,T key,Comparator<T> comp){
int start = 0;
int end = search.length - 1;
while(start <= end){
//int mid = (start + end) / 2;
int mid = (end - start) / 2 + start;
if(search[mid].equals(key)){
return mid;
}
else if(comp.compare(search[mid], key) > 0){
end = mid - 1;
}
else{
start = mid + 1;
}
}
return -1;
}
public static void main(String[] args) {
// int a = 1300000000;
// int b = 1000000000;
// System.out.println(a + b);//發(fā)生溢出
}
}