io
==========java
java.io.File 重點
==================
表示文件或者文件夾編程
1, 建立
File f1 = new File("c:/a.txt");
File f2 = new File("c:/windows");
File f3 = new File(f2, "notepad.exe");
2, 方法
文件或目錄屬性
-------------------
length() - 文件字節數,目錄字節數返回0
isFile() - 判斷是否表示文件
isDirectory() - 判斷是否表示目錄
lastModified() - 最後修改時間
getName() - 文件名
getPath() - 文件路徑
getParent() - 父目錄File對象
exists() - 文件或目錄是否存在
canRead() canWrite() canExecute() - 是否具備讀寫執行權限windows
文件或目錄操做
--------------------
createNewFile() - 建立文件, 返回是否成建立文件
mkdir() - 建立單層目錄,返回是否成建立文件
mkdirs() - 建立多層目錄,返回是否成建立文件數組
delete() - 刪除文件,刪除空目錄,返回是否成刪除
renameTo(File) - 更名安全
目錄列表
--------------------
list()
listFiles() - 子目錄和子文件的列表, 返回File[]網絡
list(FileNameFilter) - 使用給定過濾器過濾文件
listFiles(FileNameFilter)
listFiles(FileFilter)多線程
回調模式 - 其餘方法的代碼中反過來調用本身的代碼
java.io.FileFilter 接口
java.io.FileNameFilter 接口
-----------------------
文件過濾器
accept(File) - 參數文件是否符合過濾條件dom
java.io.RandomAccessFile 次重點
============================
read() - 返回指針指向的字節,指針後移一位
返回int類型,範圍0-255或-1
返回-1表示沒有數據
readInt() - 從指針位置讀4個字節做爲int返回,
若是不足4個字節會出現異常 EOFException
readByte() readChar() readShort() readLong() readFloat() readDouble() readBoolean()
readUTF() - 讀出字符串工具
write(int) - 將一個字節寫入到當前指針位置,指針後移一位
writeInt(int) - int的四個字節寫出去
writeUTF(String) - 字符串編碼爲UTF-8編碼寫出測試
seek(位置) - 將指針移動到給定位置
getFilePointer()
用處
----------------
1, 處理固定格式的文件
2, 處理大型文件
處理 BMP 文件
----------------
1,前54字節是BMP頭,包含文件大小
2,寬度從18字節開始到21字節
高度從22字節開始到25字節
3,54字節以後是像素顏色數據 RGB
每一個像素3字節
4,像素從左到有從上倒下排列
5,每一個掃描行字節量必須是4的倍數
6,寬度、高度、RGB色是低字節序排列
io
================
InputStream
FileInputStream
ByteArrayInputStream
BufferedInputStream
DataInputStream
PrintStream
OutputStream
...
========================
InputStream
OutputStream
========================
1, 抽象類
2, 讀寫方法
---------------
read() - 讀取一個字節,返回int類型
若是返回-1,表示讀取結束
read(byte[]) - 一次讀取多個字節放入數組
返回int類型,表示讀取的字節數量
若是返回-1,表示讀取結束
write(int) - 寫一個字節
write(byte[])
write(byte[],起始位置,字節數)
FileInputStream
FileOutputStream
======================
文件讀寫
ByteArrayInputStream
ByteArrayOuputStream
======================
內存字節數組的讀寫
BufferedInputStream
BufferedOutputStream
======================
爲其它流提供內存緩衝以提升讀寫效率
當io效率差時,可考慮接入BufferedIO
默認緩衝區大小是8k字節
可經過構造方法指定緩衝區大小
flush() - 手動刷出輸出流中緩衝的數據
DataInputStream
DataOutputStream
======================
以字節方式讀寫基本數據
若是讀寫的數據具備固定的字節格式,可選用DataIO
readInt() - 讀4個字節
readUTF() - 讀字符串
writeInt(888888) - 寫4個字節
writeUTF("abc") - 寫字符串
PrintStream
=======================
打印流
將任何數據變成字符數據輸出
輸出文本數據可選用 PrintStream
print()
println()
io
==================
字符集
======================
Reader
Writer
======================
read() - 返回int類型,表示一個char
返回-1表示沒有數據
read(char[]) - 讀出多個字符放入數組,返回int表示字符個數
返回-1表示沒有數據
write(int) - 將後兩個字節按字符集編碼後寫出
write(char[])
write(char[],起始位置,字符個數)
write(String)
InputStreamReader
OutputStreamWriter
======================
轉換流
將從字節流中讀取的字節按指定編碼或默認編碼轉換爲字符
FileReader
FileWriter
======================
內部是InputStreamReader接FileInputStream
OutputStreamWriter接FileOutputStream
使用默認編碼
BufferedReader
BufferedWriter
======================
BufferedReader 的 readLine()
讀取正行數據,不包含末尾換行符
PrintWriter
======================
任何類型數據轉爲字符輸出
print()
println()
對象序列化
ObjectOutputStream
ObjectInputStream
======================
1,序列化的對象必須實現Serializable接口
2,writeObject(Object) 序列化對象
3,readObject() 反序列化對象
4,static 和 transient 成員不序列化
5,對象中成員類型也必須是可序列化的
線程
========================
1, 實現線程兩種方式
a,繼承Thread
b,實現Runnable接口
2, 線程的靜態方法
---------------------
Thread.sleep(毫秒值) - 當前線程暫停給定毫秒
Thread.currentThread() - 得到當前線程對象
Thread.yield() - 暫停執行,切換到其餘線程執行
3, 線程的非靜態方法
---------------------
setId()
getId()
setName()
getName()
setPriority(int) - 優先級設置,1-10,默認5
getPriority()
setDaemon(boolean) - 後臺線程
isDaemon()
java虛擬機等待全部的前臺線程消亡,自動退出
即便還有後臺線程沒有執行完,虛擬機也會自動退出
join() - 將一個線程加入到當前線程中
4, 何時使用線程
-------------------------
1,多個並行子任務提升程序效率
2,阻塞的操做,必須在一個線程內執行
3,後臺執行的重複任務
線程
==================
多線程共享數據,線程的同步
synchronized (重點)
----------------------------------
1,同步鎖
每一個對象上都有一個同步鎖
一個線程執行 synchronized 塊時,
須要得到同步鎖才能執行
等執行完會歸還鎖
2,synchronized 非靜態方法
要得到當前實例的同步鎖
3,synchronized 靜態方法
要得到類對象的同步鎖
4,synchronized 塊
synchronized(對象) {
......
}
要得到小括號中對象的同步鎖
能夠選擇如下對象:
a, this
b, 類對象
c, 非靜態成員 Object lock = new Object()
d, 靜態成員 static Object lock = new Object()
e, 正在修改或訪問的對象
5,線程安全效率不好
線程不安全 - 線程安全
jdk1.2 - jdk1.0
ArrayList - Vector
HashMap - HashTable
StringBuilder - StringBuffer
6,得到線程安全的集合
syncList = Collections.synchronizedList(List);
syncMap = Collections.synchronizedMap(Map);
syncSet = Collections.synchronizedSet(Set);
等待通知機制 (非重點)
==================
1,wait 和 notifyAll 必須在synchronized代碼塊內調用
2,wait 會釋放鎖 (sleep不會釋放鎖)
3,wait 總應該在一個循環檢查內調用(旋鎖)
4,notify 方法只通知一個等待的線程
notifyAll 方法通知全部等待的線程
多數狀況下應該使用notifyAll方法
5,等待通知機制能夠看做是線程之間通訊的機制
一個線程運算產生結果後通知另外一個線程使用該數據
Timer
TimerTask
----------------------------------
1,執行重複任務
2,TimerTask - 執行的任務
3,Timer - 計時重複調用任務
schedule(TimerTask, Date)
在給定時間點執行一次指定任務
schedule(TimerTask, Date, long)
在給定時間點第一次執行, 間隔必定毫秒後重復執行
schedule(TimerTask, long, long)
間隔必定毫秒後執行第一次, 間隔必定毫秒後重復執行
scheduleAtFixedRate(TimerTask, Date, long)
固定頻率執行
ThreadLocal
----------------------------------
線程安全的數據傳遞方式
在線程上綁定數據,
在線程執行到其餘方法是從線程綁定取出數據
set(Object)
get()
remove()
Executors - 用於建立線程池
----------------------------------
執行大量任務時使用線程池避免建立過多線程
newCachedThreadPool()
建立一個可根據須要建立新線程的線程池
newFixedThreadPool()
建立一個可重用固定線程數的線程池
ExecutorService - 線程池
----------------------------------
execute(Runnable)
使用線程池中的線程執行任務
反射
=============
java.lang.Class
------------------------
0,獲取類對象
實例.getClass()
類.class
Class.forName(類名字符串)
1,
包含類的信息(類名、屬性、方法、構造方法)
2,
如下三個方法獲取的是有訪問權限的成員
包含繼承的成員
c.getConstructors() - 獲取構造方法
c.getFields() - 獲取屬性
c.getMethods() - 獲取方法
3,
如下三個方法獲取的是該類中定義的全部成員
不包含繼承的成員
getDeclaredConstructors()
getDeclaredFields()
getDeclaredMethods()
經過反射建立實例
---------------------------------
Class.newInstance()
無參構造方法建立實例
Constructor.newInstance(Object[])
有參構造方法建立實例
經過反射調用成員
---------------------------------
返回值 = Method.invoke(對象, 參數數組)
Field.set(對象,值) - 給對象的成員變量賦值
Field.get(對象) - 獲取對象的變量值
反射調用私有成員
setAccessable(true) - 將私有成員設爲可訪問
反射的做用:動態編程
---------------------------------
java.lang.reflect.Field
java.lang.reflect.Method
java.lang.reflect.Constructor
註解
=============
爲其餘工具、程序提供關於類、方法、屬性的更多信息
自定義註解
-------------------------
@interface 關鍵字聲明標註
@Target標註規定自定義標註的標註範圍(類、方法、屬性)
@Retention標註規定自定義標註的保留範圍(源文件、字節碼文件、內存)
@Target(ElementType.METHOD) //該標註只能應用於方法
@Retention(RetentionPolicy.RUNTIME) //在運行期保留
public @interface Test {
int id(); // 標註的屬性
String description();
}
使用標註
---------------------------
class A {
@Test(id=12, description="測試12")
public void a() {......}
}
反射提取標註
---------------------------
T t = Method.getAnnotation(Test.class);
int id = t.id();
String desc = t.description();
java.net
======================
Socket 網絡套接字
---------------------------------
ip地址 + 端口
java.net.ServerSocket
---------------------------------
構造方法指定端口號
accept() - 接受客戶端鏈接請求並創建一個Socket通道
java.net.Socket
---------------------------------
Socket s = new Socket(ip,端口);
s.getInputStream()
s.getOutputStream()
java.net.URL java.net.URLEncoder java.net.URLDecoder