package IO流_其他流_字节数组流;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import javax.imageio.stream.FileImageInputStream;
/**
-
字节数组流与文件流对接:
-
步骤:
-
1.文件内容不用太大
-
2.文件内容;字节输入流–借助程序–>写入字节数组 ;字节数组输出流
-
3.字节数组;字节数组输入流–借助程序–>输出到文件中;文件输出流吧
*/
public class ByteArrayDemo02 {public static void main(String[] args) throws IOException {
//测试:输入路径
byte[] data = getBytesFromFile(“e:/xp/test/char.txt”);//处理异常
//构建
System.out.println(“文件输入–>字节数组输出”);
System.out.println(new String(data));
System.out.println(“字节数组输入–>文件输出”);
toFileEromByteArray(data,“e:/xp/test/arr.txt”);
//换成图片测试
byte[] data1 = getBytesFromFile(“e:/xp/test/tx.jpg”);
toFileEromByteArray(data1,“e:/xp/test/arr.jpg”);
System.out.println(“文件格式输出端无法显示”);
}
/**
*1. 文件–>程序–>字节数组-
@throws IOException
*/
public static byte[] getBytesFromFile(String srcPath) throws IOException{
//创建文件源
File src = new File(srcPath);
//创建目的地:即字节数组
byte[] dest = null;
//选择流
//文件输入流 ,这里可以使用多态
InputStream is = new BufferedInputStream(new FileInputStream(src));//处理异常
//字节数组输出流;注意这里不能使用多态
ByteArrayOutputStream bos = new ByteArrayOutputStream();//操作 :不断读取文件并写出到字节数组流中
byte[] flush = new byte[1024];//flush刷新;别忘填入数字
//接收长度
int len= 0;
while(-1 !=(len=is.read(flush))){//处理声明异常
//写出到字节数组流中
bos.write(flush, 0, len);
}
bos.flush();//flush刷新
//获取数据
dest = bos.toByteArray();//toByteArray到字节数组bos.close();
is.close();//先进后关return dest;
}
/** -
字节数组输入流–借助程序–>输出到文件中
-
@throws IOException
*/
public static void toFileEromByteArray(byte[] src,String destPath) throws IOException{
//创建源及目的地
File dest = new File(destPath);//选择流:
//字节数组输入流;没有新增方法可以使用多态
InputStream is = new BufferedInputStream(new ByteArrayInputStream(src));//文件输出流
OutputStream os = new BufferedOutputStream(new FileOutputStream(dest));//处理异常//操作 ,不断读取字符数组
byte[] flush = new byte[1024];//flush刷新;别忘填入数字
//接收长度
int len= 0;
while(-1 !=(len=is.read(flush))){//处理声明异常
//写出到文件中
os.write(flush, 0, len);
}
os.flush();//flush刷新
//释放资源
os.close();
is.close();
}
}
//结果-------------------------------------------------------------
文件输入–>字节数组输出
锄禾日当午, 码农真辛苦.
一行破代码, 头疼一上午.
又破解一bug,高兴一下午.
字节数组输入–>文件输出
文件格式输出端无法显示 -