【Java基础】 I/O类库基本架构(一)

2 篇文章 0 订阅

1. Java I/O类基本架构

Java I/O包下java.io大概可以分为以下4种类型

  • 基于字节操作的I/O接口:InputStream和OutputStream
  • 基于字符操作的I/O接口:Write和Reader
  • 基于磁盘操作的I/O接口:File
  • 基于网络操作的I/O接口:Socket(不在io包下)
    前两个字节和字符操作是传输数据的数据格式,后两个磁盘和网络是传输数据的方式。I/O的核心问题要么是数据格式影响I/O的操作,要么是传输数据方式影响I/O操作,将什么样的数据写到什么地方。

1.1基于字节的I/O操作

分为输入和输出InputStream、OutputStream
InputStream、OutputStream

方法描述
int read()从输入流中读取下一个字节数据(0-255),已达最后没有可读数据时返回-1
read(byte[]b)从输入流中读取b.length的字节到字节数组b中,并返回实际读取的字节数
int read(byte[]b,int off,int len)读取字节保存在字节数组b中的下标off到len-1处,到最后返回-1
long skip(long n)从输入流中跳过并丢弃n字节的数据,返回实际跳过的字节数
int available()返回可以从输入流中读取的字节数(估计值)
void close()关闭输入流,释放占用的任何系统资源
void write(int b)将指定字节写入到字节流中
void write(byte[]b)将字符数组中的内容写入到输入流中
write(byte[]b,int off,int len )将字节数组中从下标off到len-1的字节元素写入到输出流中
void flush()清除输出流中的缓存,强制写出任何缓冲的输出字节
void close()关闭输出流,并释放占用的任何系统资源

InputStream示例:

public class InputStreamStudy {
    public static void main(String[] args) throws Exception {
        FileInputStream inputStream = null;
        try {
            inputStream = new FileInputStream("读取文件路径");
//            int by = 0;
//            while ((by = inputStream.read()) != -1) {
//                System.out.print((char) by);
//            }
            byte[] bytes = new byte[1024];
            int readCount = 0;
            while((readCount =inputStream.read(bytes))!=-1 ){
                //讲将byte数组转换成字符串输出
                System.out.println(new String( bytes,0,readCount));
            }
        } finally {
            if (inputStream != null) {
                inputStream.close();
            }
        }
    }
}

OutputStream示例:

public class OutputStreamStudy {
    public static void main(String[] args) throws Exception {
        FileOutputStream outputStream = null;
        try {
         outputStream = new FileOutputStream("输出路径");
         String str = "你好";
         outputStream.write(str.getBytes());
        } finally {
            if (outputStream != null) {
                outputStream.close();
            }
        }
    }
}

1.2基于字符的I/O操作

字符的I/O操作接口
方法大致和字节操作的类似
Reader示例:

public class ReaderStudy {
    public static void main(String[] args) throws Exception {
        FileReader fileReader = new FileReader("读取文件路径");
        BufferedReader bufferedReader = new BufferedReader(fileReader);
        String str = bufferedReader.readLine();
        while (str != null && !"".equals(str)) {
            System.out.println(str);
            str = bufferedReader.readLine();
        }
        bufferedReader.close();
    }
}

Writer示例:

public class WriterStudy {
    public static void main(String[] args) throws Exception {
        FileWriter fileWriter = new FileWriter("/Users/wanghuaikun/Desktop/ordertem10-09.txt");
        BufferedWriter bufferedWriter = new BufferedWriter(fileWriter);
        bufferedWriter.write("你好");
        bufferedWriter.newLine();
        bufferedWriter.write("嘻嘻");
        bufferedWriter.newLine();
        bufferedWriter.write("哈哈");
        bufferedWriter.close();
    }
}

1.3字节自符的转化

数据持久或网络传输都是以字节进行的,java提供了字符和字节之间的相互转换。
read字符字节转换
InputStreamReader是字节到字符转换的桥梁,从InputStream到Reader的过程是要制定编码字符集,如果使用操作系统默认字符集,可能会出现乱码。StreamDecoder是完成字节到字符解码的过程。
FileReader类就是按照这个流程来读取文件,FileReader继承了InputStreamReader,实际上读取的是文件流,通过SteamDecoder解码成char。

public class ByteCharTransReader {
    public static void main(String[] args) throws Exception{
        StringBuffer stringBuffer = new StringBuffer();
        char[] chars = new char[1024];
        FileReader fileReader = new FileReader("读取文件路径");
        while (fileReader.read(chars)>0){
            stringBuffer.append(chars);
        }
        System.out.println(stringBuffer.toString());
        fileReader.close();
    }
}

OutPutStreamWrite也是类型过程,由StreamEncoder来完成编码过程
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值