日期:2014-05-20  浏览次数:20769 次

如何将inputStream写入一个byte[]
InputStream方法提供了read(byte[]   b)方法将其内容写入一个byte数组,但是我事先不能知道这个数组的长度,我应该如何将InputStream里面的内容完全写入一个数组中呢?

------解决方案--------------------

不知道为什么非要写到一个数组中,你是什么需求?
------解决方案--------------------
InputStream.available()就是数组的长度!!
------解决方案--------------------
正好有一个这样的类


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;

public class FileByteUtil {
public static void main(String[] args) throws Exception {
File file=new File( "f:/test.doc ");
byte[] fileByte = file2byte(file);
byte2file(fileByte, "f:/test2.doc ");
}

public static byte[] file2byte(File f) throws Exception {
return file2byte(f.getPath());
}

public static byte[] file2byte(String f) throws Exception {
try {
InputStream in = new FileInputStream(f);
byte[] tmp = new byte[512];
ByteArrayOutputStream out = new ByteArrayOutputStream();
int bytesRead = in.read(tmp);
while (bytesRead != -1) {
out.write(tmp, 0, bytesRead);
bytesRead = in.read(tmp);
}
return out.toByteArray();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}

// writes byte [] to a file
public static void byte2file(byte[] data, String fn) throws Exception {
try {
OutputStream out = new FileOutputStream(fn);
out.write(data);
out.flush();
} catch (FileNotFoundException e) {
throw e;
} catch (IOException e) {
throw e;
}
}

}

------解决方案--------------------
int len = in.available();
byte b = new byte[len];
in.read(b);