IO流-四种基类IO流详解(InputStream/OutputStream/Reader/Writer)以及mark()和reset()特殊的点

本文详细解析了Java中的四大基类IO流:InputStream、OutputStream、Reader和Writer,介绍了如何使用它们进行文件复制。重点讲解了mark()和reset()方法的工作原理和使用注意事项,包括它们在BufferedInputStream中的实际行为,并提供了一个简单的代码演示。

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

目录 :

四大基类:

InputStream(字节输入流)
OutputStream(字节输出流)
Reader(字符输入流)
Writer(字符输出流)

mark()和reset()方法详解:

mark()和reset()方法详解
JAVA中mark()和reset()用法的通俗理解

如何复制一个文件:

用IO流相关操作复制一个文本

InputStream(字节输入流):基于FileInputStream实现;
操作步骤:
  1. 打开特定类型的输入流,可能会抛出FileNotFoundException 异常
   FileInputStream inputStream=new FileInputStream();
  1. 读取数据操作,-1表示读取结束,可能会抛出IOException异常
    int read=inputStream.read();
  1. 关闭流,可能会抛出IOException异常
   inputStream.close();
读操作介绍:
  • int read():
    每次读取一个字节,返回的结果为对应字节的数据;
  • int read(byte[] arr):
    批量读取数据,将数据读入到arr的byte数组中,返回值为int,表示读取的有效数据个数;
  • int read(byte b[], int off, int len):
    批量读取数据,b表示的是数据读入的缓存地址,off表示读入缓存的起始位置,len表示从起始位置开始写入的字节数量,返回值表示读取数据有效个数;
整体代码演示:
package IOdemo.IO;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
public class InputStreamDemo {
   
   
    public static void main(String[] args) throws IOException {
   
   
        //打开特定的流,可能会抛出异常,
        FileInputStream fileInputStream = null;
        try  {
   
   
            fileInputStream = new FileInputStream("E:\\javaSource2\\javacod\\20181121\\fos.txt");
            byte [] bytes=new byte[6];
            int num=0;
            while((num=fileInputStream.read(bytes))!=-1){
   
    //读取整个文本数据
                System.out.print(new String(bytes,0,num));
            }
        }catch (IOException e){
   
   
            e.printStackTrace();
        }finally {
   
   
                try {
   
    
      //可能上面也发生异常了,但是我们不知道是在创建的时刻还是在读取的时刻,
      //所以需要判断流有没有被创建
                    if(fileInputStream!=null)
                      fileInputStream.close();
                }catch (IOException e){
   
   
                    e.printStackTrace();
                }
        }

        fileInputStream.available();//得到流的大小
        fileInputStream.skip(2);//对数据源进行跳跃读取
        fileInputStream.mark(2);//标记此字节
        fileInputStream.markSupported();//当前系统是否支持mark操作,
    }
}

OutputStream(字节输出流):基于FileOutputStream实现;
操作步骤:
  1. 打开字节输出流,可能会抛出FileNotFoundException异常
  String path = "/Users/gongdezhe/Desktop/test.txt";
   //写操作时,文件不存在,会自动创建文件,并写入数据
   //当文件目录路径不合法是则会抛出异常
  FileOutputStream outputStream = new FileOutputStream(path);

  1. 写操作,可能会抛出IOException异常
       outputStream.write(int b); //每次写入一个字节
       outputStream.flush(); //刷新缓存

  1. 关闭流,可能会抛出IOException异常
      outputStream.close();
方法介绍:
  • void write(int b): 每次写入一个字节;
  • void write(byte b[]): 批量写入,写入类型为byte[];
  • void write(byte b[], int off, int len): 批量写入,可以自定义从byte数组的起始和读取长度;
  • void flush(): 刷新缓存;
具体实现演示
package IOdemo.IO;

import java.io.*;

public class OutputStreamDemo {
   
   

    public static void main(String[] args)  {
   
   

        //File file=new File("Output"); //直接创建一个新文件写入
        FileOutputStream fileOutputStream=null;
        try{
   
   
            //fileOutputStream=new FileOutputStream(file);
            fileOutputStream=new FileOutputStream
            ("E:\\javaSource2\\javacod\\20181121\\Output");
            //打开文件,如果没有此文件,会创建此文件
            fileOutputStream.write(97); //文件显示为对应字符
            //void write(int b) 每次写入一个字节
            byte [] bytes=new byte[]{
   
   'a','b','c'};
            fileOutputStream.write(bytes)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值