在异步线程中,主旦中帆线程提交了一个文件,子线程接收文件后出现文件大小变为“0”的情况。
原因:文件从主线程到子线程连接断开,导致文件上传数据丢失
处理方式:培斗在主线程中模雹将文件转为byte数组,在子线程接收该数组后再将数组转为文件。
File与byte数组的相互转换
首坦源简先判断首位让裤是否有“{}”然后将其删除然后使用文本分割对字节集进行分割
最后写一个十到十六进制的子程序将这些文本型数值转换到文本型十六进制
具体方法如下:
.版本
2
.局部变量
I,
整数型
.局部变量
Text,
文本型
.局部变量
TextA,
文本型,
,
"0"
Text
=
删首尾空
(编辑框1.内容)
Text
=
子文本替换
(Text,
“
”,
,
,
,
真)
Text
=
子文本替换
(Text,
“{”,
,
,
,
真)
Text
=
子文本替换
(Text,
“}”,
,
,
,
真)
.如果真
(Text
=
“”)
返回
()
.如果真结束
TextA
=
分割文本
(Text,
“,”,
)
Text
=
“”
.计次循环首
(取数组成员数
(TextA),
I)
.如果
(到整数
(TextA
[I])
>
15)
Text
=
Text
+
取十裂拦六进制文本
(到整数
(TextA
[I]))
+
“
”
.否则
Text
=
Text
+
“0”
+
取十六进制文本
(到整数
(TextA
[I]))
+
“
”
.如果结束
.计次循环尾
()
编辑框2.内容
=
Text
Java 文件和byte数组厅档转换/**
* 获得指定文件扮磨乱的byte数组
*/
private byte[] getBytes(String filePath){
byte[] buffer = null
try {
File file = new File(filePath)
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()
bos.close()
buffer = bos.toByteArray()
} catch (FileNotFoundException e) {
e.printStackTrace()
} catch (IOException e) {
e.printStackTrace()
}
return buffer
}
/**
* 根据byte数组,生成文件
*/
public static void getFile(byte[] bfile, 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(bfile)
} catch (Exception e) {
e.printStackTrace()
} finally {
if (bos != null) {
try {
bos.close()
} catch (IOException e1) {
e1.printStackTrace()
}
}
if (fos != null) {
try {
fos.close()
} catch (IOException e1) {
e1.printStackTrace()
}
}
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)