• 第15章-输入/输出 --- 字节流和字符流



    (一)字节流和字符流

        字节流和字符流的操作方式几乎完全一样,区别只是操作的数据单元不同而已----字节流操作的数据单元是字节,字符流操作的数据单元是字符。

     

    (二)InputStream和Reader

        InputStream和Reader是所有输入流的抽象基类,本身并不能创建实例来执行输入,但它们将成为所有输入流的模板,所以它们的方法是所有输入流都可使用的方法

        在InputStream里包含如下3个方法:

        a. int read():从输入流中读取单个字节,返回所读取的字节数据(字节数据可直接转换为int类型)

        b. int read(byte[] b):从输入流中最多读取b.length个字节的数据,并将其存储在字节数组b中,返回实际读取的字节数

        c. int read(byte[] b,int off,int len):从输入流中最多读取len个字节数据,并将其存储在数组b中,放入数组b中时,并不是从数组起点开始,而是从off位置开始,返回实际去读的字节数。

     

        在Reader里包含如下3个方法:

        a.  int read():从输入流中读取单个字符,返回所读取的字符数据(字符数组可直接转换为int类型)

        b.  int read(char[] cbuf):从输入流中最多读取cbuf.length个字符的数据,并将其存储在字符数组cbuf中,返回实际读取的字符数。

        c.  int read(char[] cbuf,int off,int len):从输入流中最多读取len个字符的数据,并将其存储在字符数组cbuf中,放入数组cbuf中时,并不是从数组起点开始,而是从off位置开始,返回实际读取的字符数。

     

     

      下面举例:

       InputStream和Reader都是抽象类,本身不能创建实例,但他们分别有一个用于读取文件的输入流:FileInputStream和FileReader,它们都是节点流----会直接和指定文件关联。

      

    复制代码
    import java.io.FileInputStream;
    import java.io.IOException;
    
    public class FileInputStreamTest
    {
        public static void main(String[] args) throws IOException
        {
            String filePath = "";//读取文件的路径
            //创建字节输入流
            FileInputStream fis = new FileInputStream(filePath);
            
            //创建一个长度为1024字节数组
            byte[] bbuf = new byte[1024];
            
            //用于保存实际读取的字节数
            int hasRead = 0;
            
            //使用循环来读取
            while((hasRead = fis.read(bbuf)) > 0)
            {
                System.out.println(new String(bbuf,0,hasRead));
            }
            
            //关闭文件输入流
            fis.close();
        }
    }
    复制代码

     

     

    复制代码
    import java.io.FileReader;
    import java.io.IOException;
    
    public class FileReaderTest
    {
        public static void main(String[] args)
        {
            String filePath = "";//读取文件的路径
            try
            {
                //创建字符输入流
                FileReader fr = new FileReader(filePath);
                char[] cbuf = new char[32];
                int hasRead = 0;
                
                while((hasRead = fr.read(cbuf)) > 0)
                {
                    System.out.println(new String(cbuf,0,hasRead));
                }
            }
            catch(IOException e)
            {
                e.printStackTrace();
            }
        }
    }
    复制代码

     

      

    (三)OutputStream和Writer

        两个流都提供了如下3个方法:

        a. void write(int c):将指定的字节/字符输出到输出流中,其中c既可以代表字节,也可以代表字符。

        b. void write(byte[]/char[] buf):将字节数组/字符数组中的数据输出到指定输出流中

        c. void write(byte[]/char[] buf,int off,int len):将字节数组/字符数组中从off位置开始,长度为len的字节/字符输出到输出流中。

     

          因为字符流直接以字符作为操作单位,所以Writer可以用字符串来代替字符数组,即以String对象作为参数。

          Writer里还包括以下两个方法:

         a. void write(String str):将str字符串里包含的字符输出到指定输出流中

         b.  void write(String str,int off,int len):将str字符串里从off位置开始,长度为len的字符输出到指定的输出流中。

     

    下面程序使用FileInputStream来执行输入,并使用FileOutputStream来执行输出,用以实现文件的复制功能:

    复制代码
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    
    public class FileOutputStreamTest
    {
        public static void main(String[] args)
        {
            try
            {
                //创建字节输入流
                FileInputStream fis = new FileInputStream("props.txt");
                
                //创建字节输出流
                FileOutputStream fos = new FileOutputStream("props2.txt");
                
                byte[] bbuf = new byte[32];
                
                int hasRead = 0;
                
                //循环从输入流中读取数据
                while((hasRead = fis.read(bbuf)) > 0)
                {
                    //每读取一次,即写入文件输出流,读了多少,就写多少
                    fos.write(bbuf, 0, hasRead);
                }
            }
            catch(Exception e)
            {
                e.printStackTrace();
            }
        }
    }
    复制代码

     

     

    复制代码
    import java.io.FileWriter;
    import java.io.IOException;
    
    public class FileWriterTest
    {
        public static void main(String[] args)
        {
            try
            {
                FileWriter fw = new FileWriter("heihei.txt");
                fw.write("大家好
    ");
                fw.write("努力学习,好好工作
    ");
            }
            catch(IOException e)
            {
                e.printStackTrace();
            }
        }
    }
    复制代码
  • 相关阅读:
    CTFHUB-技能树-Web-文件上传
    CTFHUB-技能树-Web-XSS-反射型
    一个算法习题
    python2和python3如何共存并都可用
    beacon帧字段结构最全总结(一)——beacon基本结构
    WiFi基础知识整理
    无线 WIFI 的13个信道频率范围
    Wifi模块的工作原理
    WIFI无线协议802.11a/b/g/n/ac的演变以及区别
    HTTP网络通讯协议详解
  • 原文地址:https://www.cnblogs.com/baiduligang/p/4247457.html
Copyright © 2020-2023  润新知