通過ByteArrayOutputStream將inputStream轉變為outputStream
1.首先,先編寫一個獲取文件輸入流的方法 ops()。
2. 之後在調用此方法獲得輸入流,並通過 castToBAOStream(Object obj,int bufferSize)進行轉化。
3.最後,寫出 轉化成功的 輸出流。
·········10········20········30········40········50········60········70········80········90········100·······110·······120·······130·······140·······150
Java代碼
public class Stream {
public static final int StreamFlushBufferSzie=100;//buffer size= 1K
public static ByteArrayOutputStream castToBAOStream(Object obj,int bufferSize){
// Log logger = LogFactory.getLog(CommonUtil.class);
ByteArrayOutputStream baos=new ByteArrayOutputStream();
if(obj.getClass().isInstance(baos)){
return (ByteArrayOutputStream)obj;
}else{
InputStream fis;
try{
fis=(FileInputStream)obj;
try{
BufferedInputStream bis=new BufferedInputStream(fis);
baos=new ByteArrayOutputStream();
BufferedOutputStream bos=new BufferedOutputStream(baos);
int ch;
int i=0;
while((ch=bis.read())!=-1){
bos.write(ch);
if(i++==bufferSize){
bos.flush();
i=0;
}
}
bos.flush(); //提交文件流,很關鍵
bis.close();
return baos;
}catch(ClassCastException e){
// logger.info("Stream object not a ByteArrayOutputStream or a FileInputStream:",e);
return null;
}catch(Exception e){
// logger.info("baos is null:",e);
return null;
}
}catch(ClassCastException e){
fis=(InflaterInputStream)obj;
try{
baos=new ByteArrayOutputStream();
BufferedOutputStream bos=new BufferedOutputStream(baos);
int ch;
int i=0;
// ii.read(b, off, len)
byte[] by = new byte[2048];
while((ch=fis.read(by))!=-1){
bos.write(by,0,ch);
if(i++==bufferSize){
bos.flush();
i=0;
}
}
bos.flush(); //提交文件流,很關鍵
fis.close();
// ZipUtil.getZipName().close();
return baos;
}catch(ClassCastException e1){
// logger.info("Stream object not a ByteArrayOutputStream or a FileInputStream:",e1);
return null;
}catch(Exception e1){
// logger.info("baos is null:",e1);
return null;
}
}
}
}
//產生一個文件輸入流
public static InputStream ops() throws FileNotFoundException {
File file = new File("d://lin.txt");
FileInputStream fileInputStream = new FileInputStream(file);
return fileInputStream;
}
public static void main(String[] args) throws IOException {
try {
// OutputStream outputStream = ops();
InputStream inputStream = ops();
ByteArrayOutputStream baos = castToBAOStream(inputStream,StreamFlushBufferSzie);
InputStream is = new ByteArrayInputStream(baos.toByteArray());
File file=new File("d://new.txt");
FileOutputStream outb=new FileOutputStream(file);
int bytesRead;
byte[] buf = new byte[4 * 1024];
while((bytesRead = is.read(buf))!=-1){
outb.write(buf,0,bytesRead);
}
outb.flush();
outb.close();
is.close();
System.out.println(inputStream);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
作者“zhujianjia”