将文件转换为数组:
/**
* 将文件转换为数组
* @param pathStr
* @return
*/
public static byte[] getBytesByFile(String pathStr) {
File file = new File(pathStr);
try {
FileInputStream fis = new FileInputStream(file);
ByteArrayOutputStream bos = new ByteArrayOutputStream(1000);
byte[] b = new byte[1000];
int n;
while ((n = fis.read(b)) != -1) {
bos.write(b, 0, n);
}
fis.close();
byte[] data = bos.toByteArray();
bos.close();
return data;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
分割数组
/**
* 将数组按定长分割
* @param bytes
* @param splitLength
*/
public static void splitArray(byte[] bytes,int splitLength){
/*
byte[] nums={
1,3,5,-9, -56,125,45,-90,
59,23,90,123, 34,23,-9,125,
125,45,-90,59, 23,9,5,-9,
-56,125,45,-90, 59,23,90,12,
34,23,-9,125, 23,90,12,34,
23,-9,125,-25, 45,-90,59,23,
87};
byte[] num1= Arrays.copyOfRange(nums, 0, 8);
System.out.println(Arrays.toString(num1));
System.out.println(num1.length+"--------------------------");
//8个元素为一个数组
*/
byte[] newArray=null;
if(bytes.length%splitLength==0){
System.out.println("文件是1M的整数倍");
int arrayNum=bytes.length/splitLength;
for(int i=0;i<arrayNum;i++){
newArray= Arrays.copyOfRange(bytes,i*splitLength,i*splitLength+splitLength);
//System.out.println(Arrays.toString(newArray));
String fileName= SHAUtil.getSHA256(new String(newArray));
ConvertFileAndByteArrayUtil.getFileByBytes(newArray,"D:/file/saveFile",fileName);
}
}else{
System.out.println("文件不是1M的整数倍");
int arrayNum=bytes.length/splitLength+1;
for(int i=0;i<arrayNum;i++){
newArray=Arrays.copyOfRange(bytes,i*splitLength,i*splitLength+splitLength);
if(i==arrayNum-1){
newArray=Arrays.copyOfRange(bytes,i*splitLength,bytes.length);
}
//System.out.println(Arrays.toString(newArray));
String fileName= SHAUtil.getSHA256(new String(newArray));
ConvertFileAndByteArrayUtil.getFileByBytes(newArray,"D:/file/saveFile",fileName);
}
}
}
合并数组
/**
* 使用Netty将数组合并
*/
public static void combine(){
byte[] b1={1,2,3,4};
byte[] b2={5,6,7,8,9,10};
byte[] b3={-9,-7,23,123,6};
ByteBuf buffer= Unpooled.buffer();
buffer.writeBytes(b1);
buffer.writeBytes(b2);
buffer.writeBytes(b3);
byte[] total=new byte[buffer.readableBytes()];
buffer.readBytes(total);
System.out.println(Arrays.toString(total));
}
将数组转换为文件:
/**
* 将Byte数组转换成文件
* @param bytes
* @param filePath
* @param fileName
*/
public static void getFileByBytes(byte[] bytes, String filePath, String fileName) {
BufferedOutputStream bos = null;
FileOutputStream fos = null;
File file = null;
try {
File dir = new File(filePath);
if (!dir.exists() && dir.isDirectory()) {// 判断文件目录是否存在
dir.mkdirs();
}
file = new File(filePath + "\\" + fileName);
fos = new FileOutputStream(file);
bos = new BufferedOutputStream(fos);
bos.write(bytes);
} catch (Exception e) {
e.printStackTrace();
} finally {
if (bos != null) {
try {
bos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (fos != null) {
try {
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}