IO/NIO学习笔记

基于字节流的IO:

  • File。
  • InputStream,FileInputStream。
  • OutputStream,FileOutputStream。

输入流使用示例:

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;

public class Main {

    public static void main(String[] args) throws IOException { 

        File file = new File("c:" + File.separator + "mylog.log");
        InputStream input = new FileInputStream(file);

        byte[] arr = new byte[(int) file.length()];
        int t = 0;
        int i = 0;
        while ((t = input.read()) != -1) 
            arr[i++] = (byte) t;

        System.out.println(new String(arr));
        input.close();
    }
}

输出流使用示例:

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;

public class Main {

    public static void main(String[] args) throws IOException { 

        File file = new File("c:" + File.separator + "mylog.log");
        OutputStream output = new FileOutputStream(file);

        String s = "hello world!";
        byte[] arr = s.getBytes();

        output.write(arr);
        output.close();
    }
}

基于字符流的IO:

  • File。
  • Reader,FileReader,BufferedReader。
  • Writer,FileWriter,BufferedWriter。

输入流使用示例:

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;

public class Main {

    public static void main(String[] args) throws IOException { 

        File file = new File("c:" + File.separator + "mylog.log");
        BufferedReader in = new BufferedReader(new FileReader(file));

        StringBuilder sb = new StringBuilder();
        String s = "";

        while ((s = in.readLine()) != null)
            sb.append(s + "\n");

        System.out.println(sb.toString());
        in.close();
    }
}

输出流使用示例:

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;

public class Main {

    public static void main(String[] args) throws IOException { 

        File file = new File("c:" + File.separator + "mylog.log");
        BufferedWriter out = new BufferedWriter(new FileWriter(file));

        String str = "hello world";
        out.write(str);
        out.close();
    }
}

标准输入System.in是没有被包装,未经加工过的InputStream,因此在使用时需要对其包装。

public final static InputStream in = nullInputStream(); //System类中的定义
Scanner in = new Scanner(System.in);

标准输出System.out和标准错误System.err都被包装成了PrintStream,可以直接使用。

public final static PrintStream out = nullPrintStream();
public final static PrintStream err = nullPrintStream();

nio:为了提高效率引入nio,使得io操作更接近于操作系统的io方式。

  • 通道(类似煤矿的矿藏),FileChannel。
  • 缓冲器(类似运煤的煤车),ByteBuffer。

旧io中FileInputStream,FileOutputStream和RandomAccessFile被修改以支持创建FileChannel对象。
使用方式:

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;

public class Main {

    private static final int BSIZE = 1024;
    public static void main(String args[]) throws IOException {

        FileChannel fc = new FileOutputStream("E:/channel.txt").getChannel();
        fc.write(ByteBuffer.wrap("hello world".getBytes()));
        fc.close();

        fc = new FileInputStream("E:/channel.txt").getChannel();
        ByteBuffer buff = ByteBuffer.allocate(BSIZE);
        fc.read(buff);
        buff.flip();
        while (buff.hasRemaining())
            System.out.print((char)buff.get());
        fc.close();
    }
}

这里写图片描述

io与nio区别:

  1. io是基于流的,nio是基于缓冲区。
  2. io中包含字节流和字符流,nio包含缓冲区、通道和选择器。
  3. io是阻塞型io,nio是非阻塞型io。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值