IO流--简单介绍应用(不包含对象序列化流)

本文介绍了Java IO流的基本概念,包括字节流和字符流的区别,并展示了如何使用BufferedWriter将ArrayList中的元素写入文件,以及对比了使用缓冲流与不使用缓冲流复制文件的效率差异。示例代码涵盖了FileInputStream、FileOutputStream、BufferedInputStream、BufferedOutputStream等核心类的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

java IO–简单介绍应用

什么是IO流

用来进行输入输出操作的流就称为IO流。 换句话说,IO流就是以流的方式进行输入输出.

IO体系

[在这里插入图片描述
1、文件(file):FileInputStream、FileOutputStream、FileReader、FileWriter

2、数组([]):

  • 2.1、字节数组(byte[]):ByteArrayInputStream、ByteArrayOutputStream
  • 2.2、字符数组(char[]):CharArrayReader、CharArrayWriter

3、管道操作:PipedInputStream、PipedOutputStream、PipedReader、PipedWriter

4、基本数据类型:DataInputStream、DataOutputStream

5、缓冲操作:BufferedInputStream、BufferedOutputStream、BufferedReader、BufferedWriter

6、打印:PrintStream、PrintWriter

7、对象序列化反序列化:ObjectInputStream、ObjectOutputStream

8、转换:InputStreamReader、OutputStreamWriter

9、字符串(String:StringBufferInputStream、StringBufferOutputStream、StringReader、StringWriter

从数据传输方式看,可以将 IO 类分为:

  • 1、字节流(字节流是给机器看的)—支持所有格式
  • 2、字符流(字符流是给人看的)–支持处理文本文件

字节流是以一个字节单位来运输的,比如一杯一杯的取水。而字符流是以多个字节来运输的,比如一桶一桶的取水,一桶水又可以分为几杯水。

常用的类:如文件最基本的读写类 File 开头的、文件读写带缓冲区的类 Buffered 开头的类,对象序列化反序列化相关的类 Object 开头的类。

IO类和相关方法

最基本的是 4 个抽象类:InputStream、OutputStream、Reader、Writer。最基本的方法也就是一个读 read() 方法、一个写 write() 方法。具体的实现还是要看继承这 4 个抽象类的子类

InputStream 类

在这里插入图片描述

Outputstream

在这里插入图片描述

Reader

在这里插入图片描述

writer

在这里插入图片描述

具体api功能请查看api文档

案例

把list中的元素添加到txt文件中

package lqh.IO;

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;

public class ArrayListToFileDemo {
    public static void main(String[] args) throws IOException {
        BufferedWriter bw = new BufferedWriter(new FileWriter("E:\\txt\\java1.txt"));
        ArrayList<Student> arrayList = new ArrayList<Student>();
        Student s1 = new Student(1, "林枪侠", 12, "河南郑州");
        Student s2 = new Student(2, "林侠", 21, "河南周口");
        Student s3 = new Student(3, "林枪", 23, "河南新乡");
        Student s4 = new Student(4, "枪侠", 24, "河南洛阳");
        arrayList.add(s1);
        arrayList.add(s2);
        arrayList.add(s3);
        arrayList.add(s4);
        for (Student s : arrayList
        ) {
            StringBuilder sb = new StringBuilder();
            sb.append(s.getSid()).append(s.getName()).append(s.getAge()).append(s.getAddress());
            bw.write(sb.toString());
            bw.newLine();
            bw.flush();
        }
        bw.close();
    }
}
 class Student {
private String name;
private int sid;
private int age;
private String address;

public Student() {
        }

public Student(int sid, String name, int age, String address) {
        this.sid = sid;
        this.address = address;
        this.age = age;
        this.name = name;
        }

public String getName() {

        return name;
        }

public void setName(String name)
        {
        this.name = name;
        }

public int getSid()
        {
        return sid;
        }

public void setSid(int sid)
        {
        this.sid = sid;
        }

public int getAge() {

        return age;
        }

public void setAge(int age) {

        this.age = age;
        }

public String getAddress() {

        return address;
        }

public void setAddress(String address) {

        this.address = address;
        }
        }

复制视频

package lqh.IO;

import java.io.*;

public class BufferStreamDemo {
    public static void main(String[] args) throws IOException {
        BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("E:\\java\\0907.mp4"));
        BufferedInputStream bis = new BufferedInputStream(new FileInputStream("E:\\txt\\0907.mp4"));
        byte[] by = new byte[1024];
        int len;
        while ((len = bis.read())!=-1){
            bos.write(len);
        }
        bos.close();
        bis.close();
    }
}


//不使用缓冲流
 public void test14() throws IOException {
        // 输入和输出都不使用缓冲流
        FileInputStream in = new FileInputStream("E:\\视频资料\\大数据原理与应用\\1.1大数据时代.mp4");
        FileOutputStream out = new FileOutputStream("1.1大数据时代.mp4");
        int len = 0;
        byte[] bs = new byte[1024];
        long begin = System.currentTimeMillis();
        while ((len = in.read(bs)) != -1) {
            out.write(bs, 0, len);
        }
        System.out.println("复制文件所需时间:" + (System.currentTimeMillis() - begin)); // 平均时间 700 多毫秒
        in.close();
        out.close();
    }
    out.write(bs, 0, len);
        }
        System.out.println("复制文件所需时间:" + (System.currentTimeMillis() - begin)); // 平均时间 700 多毫秒
        in.close();
        out.close();
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值