IO流中的字节和字符流的简单学习

1.IO流

IO流 的本质就是对电脑的文件进行读和写的

输入流:从磁盘读取到内存

输出流:从内存写入到磁盘

在servlet中,response对象获取的输出流,即字节流和字符流互斥,只能使用一个。

原因是response对象只有一个缓冲区,数据都是先到缓冲区,等servlet结束后,缓冲区的数据才会写到客户端。

只有一个缓冲区,只能用于一个字节输出流,或字符输出流。 输入流分为两种:

1.字节输入流 FileInputStream

2.字符输入流

输出流分为两种:

1.字节输出流 FileOutputStream

2.字符输出流

1.1字节输入流

package com.qfedu.a_input;
​
import java.io.*;
​
public class Demo1 {
    public static void main(String[] args) throws IOException {
        File file = new File("C:/aaa/1.txt");
        FileInputStream fis = new FileInputStream(file);
        BufferedInputStream bis = new BufferedInputStream(fis);
        byte[] buf = new byte[1024 * 4];
        int length;
        while ((length = bis.read(buf)) != -1){
            System.out.println(new String(buf, 0 ,length));
        }
        fis.close();
        bis.close();
    }
}

BufferedInputStream 其实FileInputStream其实一次读取一个字节的,但是使用BufferedInputStream 了之后,可以搞一个缓冲的数组,一次可以读取多个,那么循环次数就会减少,代码的效率就会提升。

1.2字节输出流

BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(new File("目标文件的位置")));
        bos.write("写入的内容".getBytes(StandardCharsets.UTF_8));
        bos.close();

将一个图片从一个盘符复制到另一个盘符

package com.qfedu.homework;
​
import java.io.*;
//    自己找一个图片然后进行复制
public class Demo1 {
    public static void main(String[] args) throws IOException {
        BufferedInputStream bis = new BufferedInputStream(new FileInputStream(new File("c:/aaa/1.jpeg")));
        BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(new File("c:/aaa/bbb/2.jpeg")));
        byte[] bus = new byte[4 * 1024];
        int length;
        while((length = bis.read(bus)) != -1) {
            bos.write(bus, 0, length);
        }
        bos.close();
        bis.close();
    }
}

1.3字符输入输出流【非重点】

FileReader:

String        readLine();一次读取一行数据,如果读取到末尾就返回null

是一个阅读字符文件的便利类,是专门处理字符文件的,比如txt文件。音频视频图片

不能使用这个流。

是从字节流到字符流的桥:它读取字节,并使用指定的charset将其解码为字符 。 它使用的字符集可以由名称指定,也可以被明确指定,或者可以接受平台的默认字符集

牵涉到解码,底层是字节流,但是会解码为字符。如果解码失败就意味着咱们读取失败了

一般不会使用字符流操作图片 音频 视频等,因为牵涉到解码。会出问题!!!

开发一般使用字节流!!!

FileWriter

写字符文件一个便利类

newLine();换行

总结:

字节流:
    可以处理 文本  图片 音频  视频
字符流:
    只能处理文本 

例:使用字符流复制一个小说

package com.qfedu.homework;
​
import java.io.*;
​
//使用字符流复制一个小说
public class Demo4 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new FileReader(new File("c:/aaa/斗破苍穹.txt")));
        BufferedWriter bw = new BufferedWriter(new FileWriter(new File("c:/aaa/bbb/斗破苍穹字符输出.txt")));
        char[] chars = new char[1024 * 4];
        int length;
        while((length = br.read(chars)) != -1){
            bw.write(chars, 0, length);
        }
        bw.close();
        br.close();
    }
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值