• 【Java】字节流-从文件输入,输出到文件


    假如需要复制一张图片,一份word,一个rar包。可以以字节流的方式,读取文件,然后输出到目标文件夹。

    以复制一张4M的图片举例。

    每次读一个字节:

    ch = (char)System.in.read();  //读入一个字符,返回读到的字节的int表示方式,读到末尾返回-1

    复制时候一个字节一个字节的读取、写入,这样是很慢的。设置一个用来缓冲的字符数组,会让复制的过程快很多(每次读入的字节变多)。

    方便阅读,类的名称用中文描述

    import java.io.*;
    public class 字节流的缓冲区 {
        public static void main(String[] args) throws Exception {
            FileInputStream in=new FileInputStream("E:\photo\IMG.jpg");
            //FileOutputStream中的文件不存在,将自动新建文件
            OutputStream out=new FileOutputStream("E:\test.jpg");
            byte[] buff=new byte[1024];
            int b;
            long beginTime=System.currentTimeMillis();
            while ((b=in.read(buff))!=-1) {
                out.write(buff,0,b);
            }
            long endTime=System.currentTimeMillis();
            System.out.println("运行时长为: "+(endTime-beginTime)+"毫秒");
            in.close();
            out.close();
            System.out.println("正常运行!");
        }
    }

    这里设置的字节数组是1024个字节。复制的时间比一个字节一个字节的复制快很多。

    //封装了FileOutputStream管道之后,三种函数参数
    //write(b) 写入一个b
    //write(byte[] b) 将字节数组全部写入
    //write(byte[] b,int off,int len) 例如write(byteTest,0,len)表示数组byteTest中从0开始长度为len的字节
    //一般都用第3个

    字节缓冲流

    用BufferedInputStream和BufferedOutputStream来封装FileInputStream和FileOutputStream

    方便阅读,类的名称用中文描述

    import java.io.*;
    public class 字节缓冲流 {
        public static void main(String[] args) throws Exception {
            BufferedInputStream bis=new BufferedInputStream(new FileInputStream("E:\photo\IMG.jpg"));
            BufferedOutputStream bos=new BufferedOutputStream(new FileOutputStream("E:\test.jpg"));
            int len;
            long begintime=System.currentTimeMillis();
            while((len=bis.read())!=-1) {
                bos.write(len);
            }
            long endtime=System.currentTimeMillis();
            System.out.println("运行时间为:"+(endtime-begintime)+"毫秒");
            bis.close();
            bos.close();
            System.out.println("正常运行");
        }
    }

    将String类的对象用字节流写入文件时

    import java.io.*;
    public class outFile {
        public static void main(String[] args) throws Exception {
            FileOutputStream out=new FileOutputStream("example.txt");
            String str="测试";
            byte[] b=str.getBytes();
            for(int i=0;i<b.length;i++) {
                out.write(b[i]);
            }
            out.close();
            System.out.println("输出成功");
        }
    }

    当需要以附加的形式写入文件时

    FileOutputStream out=new FileOutputStream("example.txt",true);

     转换流

    BufferedReader in = new BufferedReader(new InputStreamReader(System.in));

    String x = in.read();

    InputSteamReader和OutputStreamReader为转换流,前者将字节流转化为字符流,后者将字符流转化为字节流

  • 相关阅读:
    SpringBoot多数据源启动器
    数据结构模拟器
    mysql5.7查询今天、昨天、本周、上周、本月、上月数据
    SpringBoot项目本地可以发送邮件,部署到阿里云服务器发送邮件失败的解决方法
    Centos7搭建Maven私服-Nexus3.19.1-01
    Linux中部署jar包并指定日志输出文件
    ThreadLocal是什么?谈谈你对他的理解
    leetcode-双指针遍历
    不要再纠结css/js/html有没有必要放在WEB-INF下了
    数据库的表的字段名称与实体类(pojo)不对应解决方案
  • 原文地址:https://www.cnblogs.com/to-red/p/9813281.html
Copyright © 2020-2023  润新知