• java io 下载文件 字节流io典型应用


        public String downLoadFromUrl(String urlStr) {
            try {
                String fileName = getRandomString(20)+".jpg";
                String savePath = "/data/back";
            //    fileName = urlStr.substring(urlStr.lastIndexOf("/")+1);
                URL url = new URL(urlStr);
                HttpURLConnection conn = (HttpURLConnection)url.openConnection();
                //设置超时间为3秒
                conn.setConnectTimeout(3*1000);
                //防止屏蔽程序抓取而返回403错误
                conn.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");
    
                //得到输入流
                InputStream inputStream = conn.getInputStream();
                //获取自己数组
                byte[] getData = readInputStream(inputStream);
    
                //文件保存位置
                File saveDir = new File(savePath);
                if(!saveDir.exists()){
                    saveDir.mkdir();
                }
                File file = new File(saveDir+File.separator+fileName);
                FileOutputStream fos = new FileOutputStream(file);
                fos.write(getData);
                if(fos!=null){
                    fos.close();
                }
                if(inputStream!=null){
                    inputStream.close();
                }
    
                System.out.println("info:"+url+" download success");
                String localFile = saveDir+File.separator+fileName;
                File fileLocal = new File(localFile);
    
                String retUrl = upload(fileLocal);
                fileLocal.delete();
                return retUrl;
    
            } catch (Exception e) {
                e.printStackTrace();
                throw new RuntimeException(e);
            }
    
    
        }
    
        public static  byte[] readInputStream(InputStream inputStream) throws IOException {
            byte[] buffer = new byte[1024];
            int len = 0;
            ByteArrayOutputStream bos = new ByteArrayOutputStream();
            while((len = inputStream.read(buffer)) != -1) {
                bos.write(buffer, 0, len);
            }
            bos.close();
            return bos.toByteArray();
        }


    //得到输入流
                InputStream inputStream = conn.getInputStream();

    得到返回字节流

        public static  byte[] readInputStream(InputStream inputStream) throws IOException {
            byte[] buffer = new byte[1024];
            int len = 0;
            ByteArrayOutputStream bos = new ByteArrayOutputStream();
            while((len = inputStream.read(buffer)) != -1) {
                bos.write(buffer, 0, len);
            }
            bos.close();
            return bos.toByteArray();
        }


    读取InputStream,将字节流灌入byte数组,通过ByteArrayOutputStream向Byte数组写入数据,这里的ByteArrayOutputStream无非是起一个合并每次读取byte[]的嫁接功能,也可以不用,自己拼接,只要将InputStream全部压入byte[]即可


               File file = new File(saveDir+File.separator+fileName);
                FileOutputStream fos = new FileOutputStream(file);
                fos.write(getData);

    通过FileOutputSteam在本地文件中写入数据


    核心:

    InputStream-byte[]-OutputStream(FileOutputStream)

    byte[]为中介


    参考:http://blog.csdn.net/qq_25184739/article/details/51205186


    2.输出字节流OutputStream



    IO 中输出字节流的继承图可见上图,可以看出:

    1.    OutputStream是所有的输出字节流的父类,它是一个抽象类。

    2.    ByteArrayOutputStreamFileOutputStream是两种基本的介质流,它们分别向Byte数组、和本地文件中写入数据。PipedOutputStream是向与其它线程共用的管道中写入数据。

    3.    ObjectOutputStream和所有FilterOutputStream的子类都是装饰流。


     

    outputStream中的三个基本的写方法
       abstract void write(int?b):往输出流中写入一个字节。
         void write(byte[]?b) 
    :往输出流中写入数组b中的所有字节。
         void write(byte[]?b, int?off, int?len) 
    :往输出流中写入数组b中从偏移量off开始的len个字节的数据。


    其它方法
       void flush() 
    :刷新输出流,强制缓冲区中的输出字节被写出。
         void close() 
    :关闭输出流,释放和这个流相关的系统资源。


  • 相关阅读:
    使用vue3.0仿Mac系统的提醒事项做的一个TODO功能
    一些容易忽略的css选择器
    根据node节点生成VNode以及解析成node节点
    jQuery-day02
    jQuery-day01
    初探WebSocket
    Python-如何对字典集合进行排序
    sqlserver获取代理服务作业job的执行情况
    excel中多表汇总
    [javascript][转载]jQuery获取Select选择的Text和 Value
  • 原文地址:https://www.cnblogs.com/silyvin/p/9106686.html
Copyright © 2020-2023  润新知