技术中心

这里象征着我们的态度和能力

>java把一个文件转化为byte字节
发布者:中国IT实验室    信息来源:中国IT实验室    发布时间:2012-01-09      浏览次数:5127
分享到:

新浪微博

腾讯微博

QQ空间

豆瓣网

QQ好友

欢迎进入Java社区论坛,与200万技术人员互动交流 >>进入

最近做android的时候,同事说用一个URL获取一张图片太慢了,看能不能发字节过来,我就测试了一下,把一个File的文件转化为一个byte[]数组字节,下面是代码:

view plain
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(" ");
            }
        }
        /**
         * 把得到的字节写到一个新的文件里面
         */
        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;
    }
}

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

4000-880-989
(24小时热线)
联系客服
微信公众号

官方公众号

小程序

©2008-2022 CORPORATION ALL Rights Reserved. 昆明奥远科技有限公司版权所有 滇ICP备09003328号-1 滇公网安备 53011102000818号
昆明那家网络公司好,新媒体运营,网站优化,网络推广,网站建设,网页设计,网站设计,网站推广,云南网站公司,昆明新媒体公司,云南网红主播,昆明SEO公司,昆明网站建设,昆明网络推广,昆明网站优化,昆明网站推广,红河网站建设,大理网络公司,曲靖网络公司,丽江网站设计,昭通网络公司,保山大数据服务,智慧高速建设,智慧校园服务,云南IDC服务商,网络安全测评,等保测评,网站关键词排名优化服务,服务客户尽超2000余家,一切尽在奥远科技,服务电话:13888956730