如果必须要用FileOutputStream的话那是没有办法的,因为FileOutputStream是属于比较底层的流,所有的构造方法都与文件关联。
但是如果要写入blob中的话使用FileOutputStream却是有点儿多余的,因为像你那样写入文件读出来之后同样还是byte数组,所以可以直接使用OutputStream的write(byte[] b, int off, int len)方法,OFF开始标记一般设为0,len偏移量一般设为byte的length大小
不会,你可以设定一个指定大小的数组,然后重复读写。
import javaio;
public class FileStreamDemo2 {
public static void main(String[] args) throws IOException {
//创建两个文件
File inFile = new File("tcty36rm");
File outFile = new File("newtcty36rm");
//最大的流为60Mb,当文件的容量大于60Mb的时候便分开流
final int MAX_BYTE = 60000000;
long streamTotal = 0; //接受流的容量
int streamNum = 0; //流需要分开的数量
int leave = 0; //文件剩下的字符数
byte[] inOutb; //byte数组接受文件的数据
//创建流文件读入与写出类
FileInputStream inStream = new FileInputStream(inFile);
FileOutputStream outStream = new FileOutputStream(outFile);
//通过available方法取得流的最大字符数
streamTotal = inStreamavailable();
//取得流文件需要分开的数量
streamNum = (int)Mathfloor(streamTotal/MAX_BYTE);
//分开文件之后,剩余的数量
leave = (int)streamTotal % MAX_BYTE;
//文件的容量大于60Mb时进入循环
if (streamNum > 0) {
for(int i = 0; i < streamNum; ++i){
inOutb = new byte[MAX_BYTE];
//读入流,保存在byte数组
inStreamread(inOutb, 0, MAX_BYTE);
outStreamwrite(inOutb); //写出流
outStreamflush(); //更新写出的结果
}
}
//写出剩下的流数据
inOutb = new byte[leave];
inStreamread(inOutb, 0, leave);
outStreamwrite(inOutb);
outStreamflush();
inStreamclose();
outStreamclose();
}
}
业务场景:
在异步线程中,主线程提交了一个文件,子线程接收文件后出现文件大小变为“0”的情况。
原因:文件从主线程到子线程连接断开,导致文件上传数据丢失
处理方式:在主线程中将文件转为byte数组,在子线程接收该数组后再将数组转为文件。
File与byte数组的相互转换
RandomAccessFile类
public class RandomAccessFile extends Object implements DataOutput, DataInput, Closeable
此类的实例支持对随机访问文件的读取和写入。随机访问文件的行为类似存储在文件系统中的一个大型 byte
数组。存在指向该隐含数组的光标或索引,称为文件指针;输入 *** 作从文件指针开始读取字节,并随着对字节的读取而前移此文件指针。如果随机访问文件以读取/写入模式创建,则输出 *** 作也可用;输出 *** 作从文件指针开始写入字节,并随着对字节的写入而前移此文件指针。写入隐含数组的当前末尾之后的输出 *** 作导致该数组扩展。该文件指针可以通过
getFilePointer 方法读取,并通过 seek 方法设置。
public void seek(long pos)
throws IOException设置到此文件开头测量到的文件指针偏移量,在该位置发生下一个读取或写入 *** 作。偏移量的设置可能会超出文件末尾。偏移量的设置超出文件末尾不会改变文件的长度。只有在偏移量的设置超出文件末尾的情况下对文件进行写入才会更改其长度。
参数:pos - 从文件开头以字节为单位测量的偏移量位置,在该位置设置文件指针。
抛出:IOException - 如果
pos 小于 0 或者发生 I/O 错误。
以上就是关于byte[]数组如何转换成fileInputStream全部的内容,包括:byte[]数组如何转换成fileInputStream、java的byte数组最多存储多少字节只用FileInputStream读取文件和只用FileOutputStream写入文件会出问题吗、byte数组与File文件的转换等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)