java中IO流的知识点总结

1.流的概念

流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象。即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作。

2.IO流的分类

IO流分为字符流和字节流.
字符流

字节流

3.字节流和字符流的区别

1.字节流读取的时候,读到一个字节就返回一个字节; 字符流使用了字节流读到一个或多个字节(中文对应的字节数是两个,在UTF-8码表中是3个字节)时。先去查指定的编码表,将查到的字符返回。
2.字节流可以处理所有类型数据,如:图片,MP3,AVI视频文件,而字符流只能处理字符数据。只要是处理纯文本数据,就要优先考虑使用字符流,除此之外都用字节流。

4.通过代码体现IO流中各种流的方法的使用

1.用普通字节流复制a文件的内容到b文件中

public class CopyFileDemo {
public static void main(String[] args) throws IOException {
    FileInputStream fis=new FileInputStream("a.txt");
    FileOutputStream fos=new FileOutputStream("b.txt");

    //方式一:一次读取写入单个字节
    int i=0;
    while((i=fis.read())!=-1){
        fos.write(i);
    }
    fos.close();
    fis.close();

    //方式二:一次读取写入一个字节数组
    byte[] by=new byte[1024];
    int len=0;
    while((len=fis.read(by))!=-1){
        fos.write(by,0,len);
    }
    fos.close();
    fis.close();
}
}

2.使用高效字符流复制文件

public class CopyFileDemo3 {
public static void main(String[] args) throws IOException {
    BufferedReader br=new BufferedReader(new FileReader("a.txt"));
    //如果d文件中有数据,true表示继续往文件中追加数据
    BufferedWriter bw=new BufferedWriter(new FileWriter("d.txt",true));

    String line=null;
    //高效字符输入流的特有方法readline(),每次读取一行数据
    while((line=br.readLine())!=null){
        bw.write(line);
        //高效字符输出流的特有方法newline()
        bw.newLine();
        //将缓冲区中的数据刷到目的地文件中
        bw.flush();
    }
    //关闭流,其实关闭的就是java调用的系统底层资源。在关闭前,会先刷新该流。
    bw.close();
    br.close();
}
}
注:
a.高效流不能直接对文件进行操作,必须通过普通流操作.高效流是从输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取。 可以指定缓冲区的大小,或者可使用默认的大小。大多数情况下,默认值就足够大了
b.字节流在操作的时候本身是不会用到缓冲区(内存)的,是与文件本身直接操作的,而字符流在操作的时候是使用到缓冲区的,并且可以使用flush方法强制进行刷新缓冲区

5.转换流

InputStreamReader 是字节流通向字符流的桥梁
OutputStreamWriter 是字符流通向字节流的桥梁
转换流可以将字节转成字符,原因在于,将获取到的字节通过查编码表获取到指定对应字符。
转换流的最强功能就是基于 字节流 + 编码表 。没有转换,没有字符流

6.打印流

PrintWriter
PrintStream
注:
A:只操作目的地,不操作数据源
B:可以操作任意类型的数据
C:如果启用了自动刷新,在调用println(),printf(),format()方法的时候,能够换行并刷新
D:可以直接操作文件

7.序列化流

ObjectOutputStream序列化流
ObjectInputStream反序列化流
序列化:把对象作为一个整体按照流一样的方式传输或者存储。
反序列化:把网络中的流数据或者文件中的流数据还原成对象
主要方法有:
1.Object readObject();该方法抛出异常:ClassNotFountException。
2. void writeObject(Object):被写入的对象必须实现一个接口:Serializable,否则就会抛出:NotSerializableException
3.如果实现了该接口,想解决黄线问题就生成一个随机的serialVersionUID号码

8.综合小案例:键盘录入数据保存到文件中

public class InputStreamReaderDemo {
public static void main(String[] args) throws IOException {
    //创建键盘录入
    InputStream is=System.in;
    //将字节流转换为字符流
    InputStreamReader isr=new InputStreamReader(is);
    //高效字符流读取数据
    BufferedReader br=new BufferedReader(isr);
    //打印流写入数据,第一个true表示如果文件中有内容就追加数据,第二个true表示启用自动刷新
    PrintWriter pw=new PrintWriter(new FileWriter("a.txt",true),true);

    String line=null;
    while((line=br.readLine())!=null){
        if("over".equals(line)){
            break;
        }
        //PrintWriter启用自动刷新
        pw.println(line);
    }
    pw.close();
    br.close();
}
}
  • 22
    点赞
  • 85
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
很抱歉,作为文本AI助手,我无法绘制思维导图。但是,我可以为您提供一个简要的java IO流知识点总结Java IO流Java用于处理输入和输出的机制。它提供了一种有效的方式来读取和写入数据,以及与文件、网络和其他设备进行交互。 Java IO流包括字节流和字符流两种类型。字节流以字节为单位进行操作,适用于处理二进制数据。而字符流以字符为单位进行操作,适用于处理文本数据。 常用的字节流包括InputStream和OutputStream类,用于读取和写入字节数据。常用的字符流包括Reader和Writer类,用于读取和写入字符数据。可以通过使用字节流和字符流的组合来实现不同类型数据的读写操作。 在Java IO流,还有一些特殊的流,如缓冲流、转换流、对象流等。缓冲流提供了缓冲区来提高IO性能。转换流用于处理字符编码和解码。对象流用于对Java对象进行读写操作。 此外,Java IO流还包括一些常用的类和方法,如File类用于处理文件和目录,RandomAccessFile类用于对文件进行随机访问,FileInputStream和FileOutputStream类用于读写文件等。 通过组合和使用不同类型的流和类,您可以实现各种复杂的IO操作,如读写文件、网络通信、序列化对象等。 希望这个简要总结对您有所帮助。如果您有任何更具体的问题,请随时提问。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [万字长文+思维导图帮你梳理 Java IO 流,还学不会你来打我(值得收藏)](https://blog.csdn.net/a1405/article/details/116766237)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值