zoukankan      html  css  js  c++  java
  • java把一个文件转化为byte字节

     

          最近做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 newFile = 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;
    	}
    }
    


    上面的getByte方法就可以得到了字节,同时我把字节转化为文件也是没有问题的! 这种方式主要是用把文件包装在xml或者json中传送,不过,我个人觉得服务器端还是一样给发送流,但是这种方式存在弊端,比如文件过大,那么字节肯定会多了,这样如果客户端突然因为某些原因而连接不上了服务器,将会导致文件传送的失败!我不推荐这种方式,个人觉得还是使用url获取,这样还可以加入断点续传的功能,排除了很多异常的问题! 这样比较好!同时我也希望大家不要考虑用这种方式给客户端传送文件!

  • 相关阅读:
    ebs R12 支持IE11
    reloc: Permission denied
    3.23考试小记
    3.21考试小记
    3.20考试小记
    3.17考试小记
    3.15考试小记
    3.13考试小记
    3.12考试小记
    3.10考试小记
  • 原文地址:https://www.cnblogs.com/springskyhome/p/3689942.html
Copyright © 2011-2022 走看看