|
@@ -5,26 +5,46 @@ import java.io.File;
|
|
import java.io.FileInputStream;
|
|
import java.io.FileInputStream;
|
|
import java.io.FileOutputStream;
|
|
import java.io.FileOutputStream;
|
|
import java.io.IOException;
|
|
import java.io.IOException;
|
|
-import java.util.ArrayList;
|
|
|
|
-import java.util.List;
|
|
|
|
|
|
+import java.util.Arrays;
|
|
|
|
|
|
import cn.minbb.serialport.handler.SendDataHandler;
|
|
import cn.minbb.serialport.handler.SendDataHandler;
|
|
import cn.minbb.serialport.listener.OnDataProgressListener;
|
|
import cn.minbb.serialport.listener.OnDataProgressListener;
|
|
|
|
+import cn.minbb.serialport.utils.LogUtil;
|
|
|
|
|
|
public class SendDataFileImpl implements SendDataHandler<File> {
|
|
public class SendDataFileImpl implements SendDataHandler<File> {
|
|
|
|
|
|
@Override
|
|
@Override
|
|
public void send(FileInputStream fileInputStream, FileOutputStream fileOutputStream, OnDataProgressListener onDataProgressListener, File file) throws IOException {
|
|
public void send(FileInputStream fileInputStream, FileOutputStream fileOutputStream, OnDataProgressListener onDataProgressListener, File file) throws IOException {
|
|
FileInputStream fis = new FileInputStream(file);
|
|
FileInputStream fis = new FileInputStream(file);
|
|
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
|
|
|
|
|
|
+ ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
|
|
int len;
|
|
int len;
|
|
byte[] buffer = new byte[64];
|
|
byte[] buffer = new byte[64];
|
|
while ((len = fis.read(buffer)) != -1) {
|
|
while ((len = fis.read(buffer)) != -1) {
|
|
- baos.write(buffer, 0, len);
|
|
|
|
|
|
+ byteArrayOutputStream.write(buffer, 0, len);
|
|
}
|
|
}
|
|
- byte[] byteArray = baos.toByteArray();
|
|
|
|
|
|
+ byte[] byteArray = byteArrayOutputStream.toByteArray();
|
|
fis.close();
|
|
fis.close();
|
|
- baos.close();
|
|
|
|
- List<byte[]> list = new ArrayList<>();
|
|
|
|
|
|
+ byteArrayOutputStream.close();
|
|
|
|
+ int length = byteArray.length;
|
|
|
|
+ int blockSize = 64, group = length / blockSize + 1;
|
|
|
|
+ int tailSize = length % blockSize;
|
|
|
|
+ for (int index = 1; index <= group; index++) {
|
|
|
|
+ byte[] byteBuffer = new byte[blockSize];
|
|
|
|
+ if (index < group) {
|
|
|
|
+ System.arraycopy(byteArray, (index - 1) * blockSize, byteBuffer, 0, blockSize);
|
|
|
|
+ } else {
|
|
|
|
+ // 最后一组 - 可能是非完整
|
|
|
|
+ byteBuffer = new byte[tailSize];
|
|
|
|
+ System.arraycopy(byteArray, (index - 1) * blockSize, byteBuffer, 0, tailSize);
|
|
|
|
+ }
|
|
|
|
+ if (byteBuffer.length != 0) {
|
|
|
|
+ // 发送数据包
|
|
|
|
+ fileOutputStream.write(byteBuffer);
|
|
|
|
+ LogUtil.setAppendFile("发送文件第" + index + "组,共" + group + "组" + Arrays.toString(byteBuffer));
|
|
|
|
+ if (null != onDataProgressListener) {
|
|
|
|
+ onDataProgressListener.onProgress(index / (float) group, index, group, byteBuffer);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
}
|
|
}
|
|
}
|
|
}
|