『壹』 java 對一個長512位元組的位元組數組byte[],寫入8個int,4個short,3個long
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.text.ParseException;
public class Test {
public static void main(String[] args) throws ParseException, IOException {
ByteArrayOutputStream bos = new ByteArrayOutputStream(512);
DataOutputStream dos = new DataOutputStream(bos);
//寫入8個int
for(int i = 0; i < 8; i++){
dos.writeInt(i);
}
//寫入4個short
for (short i = 0; i < 4;i++){
dos.writeShort(i);
}
//寫入3個long
for(long i = 0 ; i < 3; i++){
dos.writeLong(i);
}
//定義一個定長的數組
byte[] result = new byte[512];
ByteArrayInputStream bas = new ByteArrayInputStream(bos.toByteArray());
//將輸出流中的內容寫到定長數組中
bas.read(result);
dos.close();
bas.close();
//回顯
ByteArrayInputStream bas2 = new ByteArrayInputStream(result);
DataInputStream dis = new DataInputStream(bas2);
//從結果中讀取8個整型
for(int i = 0; i < 8; i++){
System.out.print(dis.readInt() + " ");
}
System.out.println();
//從結果中讀取4個short
for (short i = 0; i < 4;i++){
System.out.print(dis.readShort() + " ");
}
System.out.println();
//讀出3個long
for(long i = 0 ; i < 3; i++){
System.out.print(dis.readLong() + " ");
}
dis.close();
}
}
通過
byte[] result = new byte[512];
ByteArrayInputStream bas = new ByteArrayInputStream(bos.toByteArray());
//將輸出流中的內容寫到定長數組中
bas.read(result);
實現往固定長度的數組中讀入,來固定長度。
而便捷的寫入是通過把ByteArrayOutputStream上面裝飾成DataOutputStream來實現的
『貳』 java如何把byte數組里的十六進制轉換成int類型,如下圖的數據,雜么轉換,跪求方法和代碼
示例
packagecom.sdvdxl.other;
publicclassTest{
publicstaticvoidmain(String[]args){
byte[]bytes=newbyte[]{0x00,0x53};
for(byteb:bytes){
System.out.println(Integer.valueOf(b));
}
}
}
結果:
0
83
PS : 使用的時候會自動轉換成10進制的
『叄』 java有幾種數據類型
基本數據類型
整數類型:
byte:位元組佔用 1位元組 8位,用來表達最小的數據單位,儲存數據長度為 正負 127;
short:位元組佔用 2位元組 16位,儲存數值長度為 -32768-32767
int:位元組佔用 4位元組 32位,最為常用的整數類型,儲存長度為,-2^31-1~2^31 (21 億)
long:位元組佔用 8位元組 64位,當到達int數值極限時使用,儲存長度為 看圖片:
『肆』 java如何將byte類型數組變成int類型的數組
每4個byte轉化成一個int,使用位運算,大致如下
大端序:
int[i]=byte[4*i]<<24|byte[4*i+1]<<16|byte[4*i+2]<<8|byte[4*i+3];
小端序:
int[i]=byte[4*i]|byte[4*i+1]<<8|byte[4*i+2]<<16|byte[4*i+3]<<24;