‘壹’ 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;