前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java - IO流

Java - IO流

作者头像
kenvie
发布2022-01-20 15:37:51
7180
发布2022-01-20 15:37:51
举报
文章被收录于专栏:kenvie

IO流

  • 数据传输是需要通道的,而IO流就是数据传输的通道。
  • IO流可以形象的比喻为运送货物的传输带。

IO流的分类

  • 根据操作的数据类型的不同可以分为 :字节流与字符流。
  • 根据数据的流向分为:输入流与输出流,程序(内存)作为参照物,
  • 程序从外部读取称为输入(Input),
  • 程序向外部写数据成为输出(Output)。

字符流和字节流

字符流的由来: 因为数据编码的不同,而有了对字符进行高效操作的流对象。本质其实就是基于字节流读取时,去查了指定的码表。 字节流和字符流的区别:

  • 读写单位不同:字节流以字节(8bit)为单位,字符流以字符为单位,根据码表映射字符,一次可能读多个字节。
  • 处理对象不同:字节流能处理所有类型的数据(如图片、avi等),而字符流只能处理字符类型的数据。
  • 字节流:一次读入或读出是8位二进制。
  • 字符流:一次读入或读出是16位二进制。

设备上的数据无论是图片或者视频,文字,它们都以二进制存储的。二进制的最终都是以一个8位为数据单元进行体现,所以计算机中的最小数据单元就是字节。意味着,字节流可以处理设备上的所有数据,所以字节流一样可以处理字符数据。

字节输入流

  • InputStream 是所有的输入字节流的父类,它是一个抽象类。
  • ByteArrayInputStreamStringBufferInputStreamFileInputStream 是三种基本的介质流,它们分别从Byte 数组StringBuffer、和本地文件中读取数据。
  • PipedInputStream是从与其它线程共用的管道中读取数据,与Piped 相关的知识后续单独介绍。
  • ObjectInputStream 和所有FilterInputStream 的子类都是装饰流(装饰器模式的主角)。

构造方法

构造方法

FileInputStream(File)

FileInputStream(String filename)

常用方法

read:读取一个字节,返回该字节的值,如果到达文件的末尾,则返回-1。需要注意:read()方法和迭代器一样,会自动下移的

read(byte[ ])从输入流中读取至多一个数组长度的内容,到达文件末尾,则返回-1。

字节输入流的循环读取

在项目根目录新建一个123.txt,填入kenvie

代码语言:javascript
复制
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;

public class demo {
    public static void main(String[] args) throws IOException{
        File file = new File("123.txt");
        FileInputStream fis = new FileInputStream(file);
        int result;
        while((result = fis.read())!= -1) {
            System.out.print(result+"\t");
        }
    }
}

运行结果:

打印的是kenvie每个字母对应的Ascii码

image.png

字符流的读取方法

代码语言:javascript
复制
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;

public class demo {
    public static void main(String[] args) throws IOException{
        File file = new File("123.txt");
        FileInputStream fis = new FileInputStream(file);
        byte[] bt = new byte[1024];
        int num;
        while((num=fis.read(bt))!=-1) {
            String string = new String(bt,0,num);
            System.out.println(string);
        }
    }
}

运行结果:

image.png

字节输出流

  • OutputStream 是所有的输出字节流的父类,它是一个抽象类。
  • ByteArrayOutputStreamFileOutputStream 是两种基本的介质流,它们分别向Byte 数组、和本地文件中写入数据。
  • PipedOutputStream 是向与其它线程共用的管道中写入数据。
  • ObjectOutputStream 和所有FilterOutputStream 的子类都是装饰流。

构造方法

构造方法:

FileOutputStream(File file) / FileOutputStream(String name)

  注意:如果父目录不存在,会报FileNotFoundException异常,如果父目录存在,会创建一个新的文件,如果此时已经有文件存在,会覆盖原文件

FileOutputStream(File file,boolean flag)/ FileOutputStream(String name,boolean flag)

  注意:如果当前文件需要从文件末尾进行插入(接着文件里的内容继续写),必须将第二个参数设置为true,默认不写为false,会覆盖原文件

常用方法:

write(int)向文件中写入一个字节的值

write(byte[])向文件中写入一个数组的数据。

write(byte[] offset len) 将 偏移量为 offset 的索引位置的长度为 len 的数据,写入到输出流中。

字节输出

1、会在项目根目录新建一个1234.txt文件,往文件中输入kenvie.com

代码语言:javascript
复制
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;

public class demo {
    public static void main(String[] args) throws IOException {
        File file=new File("1234.txt");
        FileOutputStream fos=new FileOutputStream(file);

        fos.write("kenvie.com".getBytes());
    }
}

2、将1.txt的内容复制到2.txt

代码语言:javascript
复制
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class demo {
    public static void main(String[] args) throws IOException {
        File file = new File("1.txt");
        FileInputStream fis = new FileInputStream(file);
        FileOutputStream fos = new FileOutputStream(new File("2.txt"));
        byte[] bt = new byte[1024];
        int num;
        while((num = fis.read(bt))!=-1) {
            fos.write(bt,0,num);
        }
        fis.close();
        fos.close();
    }
}

版权属于:kenvie

本文链接:https://cloud.tencent.com/developer/article/1937657

商业转载请联系作者获得授权,非商业转载请注明出处。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021 年 08 月,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • IO流
  • IO流的分类
  • 字符流和字节流
  • 字节输入流
    • 构造方法
      • 字节输入流的循环读取
        • 字符流的读取方法
          • 字节输出流
            • 构造方法
              • 字节输出
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档