最近在研究串口數(shù)據(jù)的接收和發(fā)送囤屹,涉及到通過串口,將圖片分包寫入到本地的問題舀奶。代碼如下:
@Test
public void pic() {
String path = "D:/atest/water.jpg"; //源原件
String path1 = "D:/atest/water1.jpg"; //目標(biāo)文件
for(int i = 0;i<4; i++){
byte[] buff = randomRed(path, i);// 分段讀取圖片
if(null!=buff){
insert(path1, i, buff); //分段寫入圖片
}
}
}
/**
* 分包讀取
*
* @parampath文件路徑
* @parampointe指針位置
* **/
public static byte[] randomRed(String path, int pointe) {
try {
RandomAccessFile randomAccessFile = new RandomAccessFile(path, "r");
//獲取RandomAccessFile對(duì)象文件指針的位置得糜,初始位置是0
randomAccessFile.seek(pointe*1024*100);// 移動(dòng)文件指針位置 和每次讀取文件的大小有關(guān)
byte[] bytes = new byte[1024*100]; //每次讀取文件的大小
int readSize = randomAccessFile.read(bytes);
if (readSize <= 0) {
randomAccessFile.close();
return null;
}
//不足1024需要拷貝去掉空字節(jié)
if (readSize < 1024 * 100) {
byte[] copy = new byte[readSize];
System.arraycopy(bytes, 0, copy, 0, readSize);
return copy;
}
randomAccessFile.close();
return bytes;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* 分包寫入
*
* @paramfileName文件名
* @parampoints指針位置
* @paraminsertContent插入內(nèi)容
* **/
public static void insert(String fileName, long points, byte[] data) {
try {
File tmp = new File(fileName);
RandomAccessFile randomAccessFile = new RandomAccessFile(tmp, "rw");
randomAccessFile.seek(points*1024*100); //移動(dòng)文件記錄指針的位置,
randomAccessFile.write(data); //調(diào)用了seek(start)方法床蜘,是指把文件的記錄指針定位到start字節(jié)的位置。也就是說程序?qū)膕tart字節(jié)開始寫數(shù)據(jù)
randomAccessFile.close();
} catch (Exception e) {
e.printStackTrace();
}
}
結(jié)果如下: