前言
某些時候我們想存儲一些整形長整形的內容到一些地方當然你可能會用分隔來存比如
這種形式並沒有錯但存以幾個缺點
字符串格式占用空間太多在java裡以上字符串至少條占*=Byte不管是讀取還是寫入都 要把字符串轉化為整形或相反大家都應該知道字符串的操作對性能的影響還是挺大的那麼我們把它直接用整形的字節流來存儲會怎麼樣呢?
不需要互轉節省開銷空間*=byte效果也是很明顯的問題來源
我這裡說下的我一個應用實例也就是我開發這個網站(ZHUTIBO)的時候右上解不是有個搜索這是個全文檢索涉及過的朋友應該知道全文檢索有一個不太樂觀的地方
更新索引比較遲緩因為影響性能所以我們發表的文章不能及時被搜索到然後我們就跟據需求重新寫了一個全文檢索功能中間有一個問題就是快速存取一堆文檔號這就是問題的由來
正題
以下算法是本人改寫自Java官網的RandomAccessFile類性能上有一定的保障大家可以放心使用
view plain package service
import javaioEOFExceptionimport javaioIOException
public class TypeService {
public int[] convertByteArrToIntArr(byte[] byteArr) {
int remained = int intNum =
remained = byteArrlength % if(remained != ){ throw new RuntimeException()}
//把字節數組轉化為int[]後保留的個數
intNum = byteArrlength /
// int[] intArr = new int[intNum]
int ch ch ch chfor(int j= k= j<intArrlength j++ k+=){
ch = byteArr[k]ch = byteArr[k+]ch = byteArr[k+]ch = byteArr[k+]
//以下內容用於把字節的位 不按照正負 直接放到int的後位中
if (ch < ){ ch = + ch} if (ch < ){ ch = + ch} if (ch < ){ ch = + ch} if (ch < ){ ch = + ch}
intArr[j] = (ch << ) + (ch << ) + (ch << ) + (ch << )}
return intArr}
public byte[] convertIntArrToByteArr(int[] intArr){
int byteNum = intArrlength * byte[] byteArr = new byte[byteNum]
int curInt = for(int j= k= j<intArrlength j++ k+= ){ curInt = intArr[j]byteArr[k] = (byte) ((curInt >>> ) & xFF)byteArr[k+] = (byte) ((curInt >>> ) & xFF)byteArr[k+] = (byte) ((curInt >>> ) & xFF)byteArr[k+] = (byte) ((curInt >>> ) & xFF)}
return byteArr
}
public static void main(String[] args) throws IOException {
// TypeService typeService = new TypeService()// // int[] intArr = new int[]{IntegerMIN_VALUE}// byte[] byteArr = nvertIntArrToByteArr(intArr)// // File file = new File( C/Users/dell/Desktop/IT解決方案/aatxt)// RandomAccessFile r = new RandomAccessFile(file rw)// rwrite(byteArr)// rclose()// // Systemoutprintln( ArraystoString( nvertByteArrToIntArr(byteArr)) )
// byte b = (byte) // Systemoutprintln( (int)b )// Systemoutprintln(ByteMAX_VALUE)// Systemoutprintln(ByteMIN_VALUE)}
From:http://tw.wingwit.com/Article/program/Java/hx/201311/25539.html