不管是什么文件都可以用字节来表示,下面的例子是将图片解码成字节,然后再编码成图片。
过程
首先将图片解码,我们需要用文件字节输入流:FIleInputStream
用FIleInputStream
可以将图片储存到字节数组中,我们通过read(byte[])
来读取。然后我们可以通过字节数组输出流将图片的字节储存到程序中。
字节数组输出流:ByteArrayOutputStream
通过write(byte[])
来储存(这边的byte[]是FileInputStream读取到的数组),然后通过toByteArray()
返回一个储存了图片字节的字节数组。
以上是将图片解码成字节并且储存在一个字节数组中。
接下来是将图片字节数组编码成图片,首先我们需要用字节数组输入流ByteArrayInputStream
来读取字节数组,然后用文件字节输出流FileOutputStream
来输出编码得到的文件。
代码
import java.io.*;
public class 对接流 {
/**
* 将图片写入程序
* @return
*/
static public byte[] TestIntputStreamAndByteArrayOuputStream(){
final File file = new File("C:\\Users\\郑大人\\Pictures\\DALI\\2.jpeg");
InputStream is=null;
final ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
try{
is=new FileInputStream(file);
final byte[] bytes = new byte[1024 * 10];
while(-1!=is.read(bytes)){
byteArrayOutputStream.write(bytes);
}
return byteArrayOutputStream.toByteArray();
}catch (Exception e){
e.printStackTrace();
}finally {
try{
if(null!=is){
is.close();
}
}catch (Exception e){
e.printStackTrace();
}
}
return null;
}
/**
* 将图片输出到文件
* @param
*/
static public void TestOutputStreamAndByteArrayInputStream(byte[] bytes){
final File file = new File("2.jpeg");
OutputStream out=null;
final ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(bytes);
try{
out=new FileOutputStream(file);
final byte[] bytes1 = new byte[1024 * 10];
while(-1!=byteArrayInputStream.read(bytes1)){
out.write(bytes1,0,bytes1.length);
}
}catch (Exception e){
e.printStackTrace();
}finally {
try{
if(null!=out){
out.close();
}
}catch (Exception e){
e.printStackTrace();
}
}
}
public static void main(String[] args) {
final byte[] bytes = TestIntputStreamAndByteArrayOuputStream();
System.out.println(bytes.length);
TestOutputStreamAndByteArrayInputStream(bytes);
}
}