2025-07-10

通過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”
 

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *