字节流和字符流介绍

文章目录

  • 前言
  • 一、字节输入流:InputStream
    • 继承关系:
    • 核心方法:
    • 实现类FileInputStream:
  • 二、字节输出流:OutputStream
    • 继承关系:
    • 核心方法:
    • 实现类FileInputStream:
  • 三、Reader:字符输入流
    • 继承关系:
    • 核心方法:
    • 实现类FileReader:
  • 四、Writer:字符输出流
    • 继承关系:
    • 核心方法:
    • FileWriter:文件输出流:
  • 总结


前言

字节流是以byte为单位进行读取,字符流是以char为单位进行读取。他们都是节点流:用于直接操作目标设备的流。下面我们对比着对下列两种流进行介绍。


提示:以下是本篇文章正文内容,下面案例可供参考

一、字节输入流:InputStream

继承关系:

InputStream是抽象的基类,必须使用其子类来使用

public abstract class InputStream implements Closeable

核心方法:

int read() throws IOException; 每次读取的是一个字节的数据,读取到文件的末尾返回-1
int read(byte b[]) throws IOException:每次读取的数据读取到byte数组中,返回读取的数据有效个数,读到文件结尾处为-1
int read(byte b[], int off, int len) throws IOException:每次读取的数据读到byte数组中,从偏移量offer开始,长度为len,读到文件结尾处为-1

实现类FileInputStream:

文件输入流:

public FileInputStream(String name)//打开一个字符串路径的流
 public FileInputStream(File file)//打开一个File实例的流

二、字节输出流:OutputStream

继承关系:

public abstract class OutputStream implements Closeable, Flushable

核心方法:

void flush() throws IOException:刷新输出流并强制缓冲的字节被写出
void write(int b) throws IOException: 将int值写入到输出流中
void write(byte b[]) throws IOException:将字节数据内容写入到输出流中
void write(byte b[], int off, int len) throws IOException :将字节数据数据从off位置写入len长度的数据到输出流中

实现类FileInputStream:

文件输入流 :将数据写入到磁盘使用该流实例操作
说明:
1、如果指定的路径不存在,会自动创建该文件路径
2、如果file存在,append参数没有传或者给定false,会清空文件原内容
3、如果文件存在,append为true,会追加内容

public FileOutputStream(String name)  
public FileOutputStream(String name, boolean append)  // 默认是false:覆盖原内容  true:以追加的形式将新增内容写在末尾
FileOutputStream(File file)    
FileOutputStream(File file, boolean append)  

三、Reader:字符输入流

继承关系:

Reader是抽象的基类,必须使用其子类来使用

public abstract class Reader implements Readable, Closeable

核心方法:

int read() throws IOException //读取一个字符,并返回字符表示为int类型 ,读取结束时-1
int read(char cbuf[]) throws IOException //输入流读取到一个char类型数据数据中,返回值读取有效个数,读取结尾时是-1
int read(char cbuf[], int off, int len) throws IOException 

实现类FileReader:

文件输入流:
当文件不存在时,会抛出FileNotFoundException异常,这个和FileInputStream类似的

public FileReader(String fileName) throws FileNotFoundException  //打开一个字符串路径的流
public FileReader(File file) throws FileNotFoundException  //打开一个file实例的流

四、Writer:字符输出流

继承关系:

public abstract class Writer implements Appendable, Closeable, Flushable

核心方法:

void write(int c) throws IOException //写入单个字符写入到输出流中
void write(char cbuf[]) throws IOException //写入字符数组到输出流中
void write(char cbuf[], int off, int len) throws IOException //从字符数组的指定偏移位置写入len长度的数据到输出流中
void write(String str) throws IOException //将字符串写入到出处流中
void write(String str, int off, int len) throws IOException

FileWriter:文件输出流:

文件输入流 :将数据写入到磁盘使用该流实例操作
说明:
1、如果指定的路径不存在,会自动创建该文件路径
2、如果file存在,append参数没有传或者给定false,会清空文件原内容
3、如果文件存在,append为true,会追加内容

public FileWriter(String fileName) throws IOException  以字符串路径来打开字符输出流
public FileWriter(String fileName, boolean append) throws IOException 以字符串路径来打开字符传输流,可以指定是否是追加形式(true)还是覆盖的形式(false)写入数据
public FileWriter(File file) throws IOException 
public FileWriter(File file, boolean append) throws IOException 

总结

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

结论:只要是处理纯文本数据,就优先考虑使用字符流。 除此之外都使用字节流。

你可能感兴趣的:(java)