今天復(fù)習(xí)了java的io流? ??
包括 之前不太明白的? byteArrayInputStream? 和??byteArrayOutputStream
到現(xiàn)在才搞明白 原來(lái)? 不同于其他的對(duì)流?
這對(duì)流的 輸入流是 inputstream的參數(shù)? 數(shù)組? ? 可以是一個(gè)String.getBytes()
而輸出位置 是outputStream? 阻塞在管道里的內(nèi)容? 可以調(diào)用toString? 和toByteArray
來(lái)獲取 輸出的位置? 也可以調(diào)用writeTo 指定磁盤位置
在這里 發(fā)現(xiàn)了一個(gè)小的知識(shí)點(diǎn)? ?如果只是字符串的話 可以使用StringReader
還復(fù)習(xí)了? objectInputStream和Input 這對(duì)流
其中由程序向磁盤寫出 (序列化) 需要的參數(shù)是 File 也就是序列化到哪? ?output
用output.writeObject()來(lái)搞定胯杭。? 需要注意的是? 在寫出的時(shí)候 要在最后寫出一個(gè)null來(lái)應(yīng)對(duì)讀取時(shí)候的異常? ?
讀取? (反序列化)? 用 input? 磁盤===>程序? ?需要的參數(shù) 也是一個(gè)File??
之后你可以得到一個(gè)對(duì)象? 當(dāng)然? 應(yīng)當(dāng)用 input.readObject !=null 來(lái)判斷是否還要繼續(xù)讀下去
還有對(duì)象和字節(jié)數(shù)組的轉(zhuǎn)換?
對(duì)象轉(zhuǎn)字節(jié)的時(shí)候? ? 兩個(gè)Output流都不用參數(shù)? ?直接用對(duì)象流套字節(jié)數(shù)組流? ?之后對(duì)象流.WriteObject 讀取對(duì)象? 然后? 字節(jié)數(shù)組.toByteArray 得到數(shù)組
反之? ?用Input? ? 這次? 字節(jié)流需要傳入? 字節(jié)數(shù)組 作為參數(shù)? ?直接用對(duì)象流套在上面 然后用ReadObject? 讀取? ?得到對(duì)象? ?
并且 今天在StackOverFlow上看到一個(gè)問(wèn)題 滥搭,關(guān)于為什么Sort后的數(shù)組 會(huì)比沒(méi)Sort的數(shù)組訪問(wèn)速度 快好多 ,? 開始 我以為是跟二分法一樣缆镣,因?yàn)榕懦脑粼镒病:髞?lái)經(jīng)過(guò)解答原來(lái)是在CPU層級(jí)上有一個(gè)推測(cè)的能力,如果你在循環(huán)中寫了一個(gè)判斷條件朽基,那么CPU在執(zhí)行多少此后胀滚,會(huì)根據(jù)之前的執(zhí)行結(jié)果 對(duì)之后的結(jié)果進(jìn)行一個(gè)推測(cè),不在經(jīng)過(guò)判斷戴差,如果發(fā)現(xiàn)一直正確送爸,那么他會(huì)一直這樣推測(cè),直到不正確,(不正確是指cup推測(cè)走這條分支碱璃,但進(jìn)入之后發(fā)現(xiàn)不對(duì)弄痹,發(fā)生回滾)饭入,然后又進(jìn)入一段時(shí)間的判定嵌器。 所以 排序之后的數(shù)組 有利于這種分支預(yù)測(cè)的進(jìn)行。