字节流和字符流

本文详细介绍了Java中的字节输入流(InputStream)和字节输出流(OutputStream),以及字符输入流(FileReader)和字符输出流(FileWriter)的使用方法,包括读写操作和注意事项。
摘要由CSDN通过智能技术生成

目录

1.字节输入流:InputStream

读取字节

2.字节输出流:OutputStream

3.字符输入流

4.字符输出流


1.字节输入流:InputStream

  • 字节输入流的作用是从数据输入源(例如磁盘、网络等)获取字节数据到应用程序(内存)中;
  • 读取字节

  • read 方法,每次可以读取一个字节的数据,提升为 int 类型,读取到文件末尾,返回 -1;
    ​
      // 1.创建一个字节输入流对象代表字节输入流管道与源文件接通
            InputStream is = new FileInputStream("D:\\code\\file-io-app\\file-io--app\\src\\hello.txt");
    
            // 2.开始读取文件中的字节数据,每次读取多个字节
            byte[]buffer1=new byte[5];
            int len1= is.read(buffer1);
            String rs1=  new String(buffer1);
            System.out.println(rs1);
    
    
    
            byte[] buffer = new byte[3];
            int len; // 记住每次读取了多少个字幕
            while ((len = is.read(buffer)) != -1){
                // 注意 :读取多少,倒出多少
                String rs=new String(buffer,0,len);// 读取字节数组,从0到len
                System.out.print(rs);
    
            }
            // 性能得到了明显的提升
            // 这种方案也不能避免读取汉字输出乱码的问题
    
            is.close();// 关闭流
    
    ​

    2.字节输出流:OutputStream

  • 字节输出流的作用是将字节数据从应用程序(内存)中传送到输出目标,如外部设备、 网络等;
  • /* FileOutputStream (文件字节输出流)
            * 作用: 以内存为基准,把内存中的数据以字节的形式写到文件中去
            */
    
            // 创建一个字节输出流管道与目标文件接通
            // 覆盖管道
           // OutputStream os= new FileOutputStream("D:\\code\\file-io-app\\file-io--app\\src\\hello.txt");
    
            OutputStream os= new FileOutputStream("D:\\code\\file-io-app\\file-io--app\\src\\hello.txt",true);
            // 2.开始写字节数据出去了
            os.write(97);// 接一个字节
            os.write('b'); // b 98
          //  os.write('美');// [ooo] 默认只能写出去一个字节
    
            os.write("我爱你".getBytes());
    
            byte[]bytes="我爱你".getBytes();
            os.write(bytes,0,6); // 一个汉字三个字节
    
            // 换行
            os.write("\r\n".getBytes());// \n只在Windows系统  \r\n支持所有的
    
            os.close(); // 关闭流

    3.字符输入流 FileReader

  • public class FileReaderTest1 {
        public static void main(String[] args) throws Exception {
    
            try ( // 1.创建一个文件字符流输出管道与源文件接通
                    Reader fr=new FileReader("file-io--app\\src\\world"))
                 {
                   // 2.读取文本文件中的内容
    //             int c; // * 记住每次读取的字符编号
    //        while ((c= fr.read())!=-1){
    //            System.out.print((char) c);
    //        }
                  // 3.每次读取多个字符
               char[]buffer=new char[3];
               int len;//记住读取到的字符数
               while ((len= fr.read(buffer))!=-1) {
                   System.out.print(new String(buffer, 0, len));
               }
    
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            }
    
        }
    }

    4.字符输出流 FileWriter

  • public class FileWriterTest1 {
        public static void main(String[] args) throws IOException {
            // 字符输出流写出数据后,必须刷新流,或者关闭流,写出去的数据才能生效
            // 创建一个文件字符输出流管道
            try(Writer  fw= new FileWriter("file-io--app\\src\\world")) {
               // 输出字符流
                // 1.写一个字符
                fw.write('a');
                 fw.write('w');
                 fw.write('哈');
    
                 // 2.写一个字符串
               fw.write("我爱你");
                fw.write("\r\n");
    
               // 3.写字符串中的一部分进去
                fw.write("我爱你中国",1,3);
                fw.write("\r\n");
    
               // 4. 写一个字符数组出去
                char[]buffer={'李','我','爱'};
                fw.write(buffer);
                fw.write("\r\n");
    
                // 5. 写一个字符数组中的一部分出去
                fw.write(buffer,0,1);
    
    
                fw.flush();
              // fw.close  关闭流,包括刷新流,但是关闭流之后,就不可以再加入数据
            } catch (IOException e) {
                e.printStackTrace();
            }
    
        }
    }

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值