java把一個文件轉化為byte字節 – JAVA編程語言程序開發技術文章

最近做android的時候,同事說用一個URL獲取一張圖片太慢瞭,看能不能發字節過來,我就測試瞭一下,把一個File的文件轉化為一個byte[]數組字節,下面是代碼:
 
import java.io.File; 
import java.io.FileInputStream; 
import java.io.FileOutputStream; 
import java.io.InputStream; 
import java.io.OutputStream; 
 
/** 
 * 把一個文件轉化為byte[]數據,然後把字節寫入一個新文件裡面 
 * @author spring sky 
 *<br> Email:vipa1888@163.com 
 *<br> QQ:840950105 
 * 
 */ 
public class FileToByte { 
    public static void main(String[] args) throws Exception { 
        File file = new File("d:/a.png"); 
        byte[] b = getByte(file); 
        /*** 
         * 打印出字節 
         * 每一行10個字節 
         */ 
        for (int i = 0; i < b.length; i++) { 
            System.out.print(b[i]); 
            if(i%10==0&&i!=0)   
            { 
                System.out.print("\n"); 
            } 
        } 
        /** 
         * 把得到的字節寫到一個新的文件裡面 
         */ 
        File newnewFile = new File("e:/我的新圖片.png"); 
        OutputStream os = new FileOutputStream(newFile); 
        os.write(b);  //把流一次性寫入一個文件裡面    
        os.flush();   
        os.close(); 
         
    } 
    /** 
     * 把一個文件轉化為字節 
     * @param file 
     * @return   byte[] 
     * @throws Exception 
     */ 
    public static byte[] getByte(File file) throws Exception 
    { 
        byte[] bytes = null; 
        if(file!=null) 
        { 
            InputStream is = new FileInputStream(file); 
            int length = (int) file.length(); 
            if(length>Integer.MAX_VALUE)   //當文件的長度超過瞭int的最大值 
            { 
                System.out.println("this file is max "); 
                return null; 
            } 
            bytes = new byte[length]; 
            int offset = 0; 
            int numRead = 0; 
            while(offset<bytes.length&&(numRead=is.read(bytes,offset,bytes.length-offset))>=0) 
            { 
                offset+=numRead; 
            } 
            //如果得到的字節長度和file實際的長度不一致就可能出錯瞭 
            if(offset<bytes.length) 
            { 
                System.out.println("file length is error"); 
                return null; 
            } 
            is.close(); 
        } 
        return bytes; 
    } 
}  www.aiwalls.com

上面的getByte方法就可以得到瞭字節,同時我把字節轉化為文件也是沒有問題的! 這種方式主要是用把文件包裝在xml或者json中傳送,不過,我個人覺得服務器端還是一樣給發送流,但是這種方式存在弊端,比如文件過大,那麼字節肯定會多瞭,這樣如果客戶端突然因為某些原因而連接不上瞭服務器,將會導致文件傳送的失敗!我不推薦這種方式,個人覺得還是使用url獲取,這樣還可以加入斷點續傳的功能,排除瞭很多異常的問題! 這樣比較好!同時我也希望大傢不要考慮用這種方式給客戶端傳送文件!

摘自 spring sky

發佈留言