与单凭字节流实现的文件-->文件式拷贝不同,字节流加字节数组流组合实现的对接流可以实现数据在系统文件、流、内存之间的传递。
package SAMPLE.IO流;
import java.io.*;
/*
实现数据在流、系统文件、内存之间的传递。
*/
public class 对接流 {
public static void main(String[] args) {
byte[] datas = FileToByteArray("C:\\Users\\kvnoe\\Desktop\\Jcase\\justice.jpg");
ByteArrayToFile(datas,"C:\\Users\\kvnoe\\Desktop\\Jcase\\justice-byte.jpg");
}
//系统文件——>字节数组
public static byte[] FileToByteArray(String srcPath){
File src = new File(srcPath);
InputStream is = null;
ByteArrayOutputStream baos = new ByteArrayOutputStream();//追加形式
try {
is= new BufferedInputStream(new FileInputStream(src));
int len = -1;
byte[] datas = new byte[1024*10];
while((len=is.read(datas))!=-1){
baos.write(datas,0,len);
}
baos.flush();
return baos.toByteArray();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally {
if(is!=null){
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return null;
}
//字节数组——>文件
public static void ByteArrayToFile(byte[] datas,String destPath){
File dest = new File(destPath);
ByteArrayInputStream bais = new ByteArrayInputStream(datas);
try(OutputStream os = new BufferedOutputStream(new FileOutputStream(dest,false))) {
int len = -1;
byte[] flush = new byte[1024*10];
while((len=bais.read(flush))!=-1){
os.write(flush,0,len);
}
os.flush();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}