package对应类

本文详细介绍了Java中的IO流,包括InputStream和OutputStream作为字节流的基础,以及Reader和Writer作为字符流的使用。同时,文章提及了File类在文件操作中的作用,如list()和listFiles()方法。此外,还讨论了System.arraycopy()在数组复制中的应用,以及Arrays类的asList()和toString()方法的功能和注意事项。
摘要由CSDN通过智能技术生成

IO

https://www.liaoxuefeng.com/wiki/1252599548343744/1255945227202752

IO流是一种顺序读写数据的模式,它的特点是单向流动

以内存为中心:

  • Input指从外部读入数据到内存,例如,把文件从磁盘读取到内存,从网络读取数据到内存等等。
    • 硬盘上的某个文件,把内容读到内存,并且以Java提供的某种数据类型表示,例如,byte[]String,这样,后续代码才能处理这些数据。
  • Output指把数据从内存输出到外部,例如,把数据从内存写入到文件,把数据从内存输出到网络等等。
    • 因为内存有“易失性”的特点,所以必须把处理后的数据以某种方式输出,例如,写入到文件。Output实际上就是把Java表示的数据格式,例如,byte[]String等输出到某个地方

同步和异步

同步IO:读写IO时代码必须等待数据返回后才继续执行后续代码,

  • 优点是代码编写简单,缺点是CPU执行效率低。

异步IO:读写IO时仅发出请求,然后立刻执行后续代码

  • 优点是CPU执行效率高,缺点是代码编写复杂。

Java标准库的包java.io提供了同步IO,而java.nio则是异步IO

  • InputStreamOutputStreamReaderWriter都是同步IO的抽象类,对应的具体实现类,以文件为例,有FileInputStreamFileOutputStreamFileReaderFileWriter

本节我们只讨论Java的同步IO,即输入/输出流的IO模型。

InputStream / OutputStream

IO流以byte(字节)为最小单位,因此也称为字节流
在这里插入图片描述

Reader / Writer

如果需要读写的是字符,并且字符不全是单字节表示的ASCII字符,那按照char来读写显然更方便,称为字符流

Java提供了ReaderWriter表示字符流,字符流传输的最小数据单位是char

ReaderWriter本质上是一个能自动编解码的InputStreamOutputStream

读取和写入文件

BufferedReader reader = new BufferedReader(new FileReader(file));
BufferedWriter writer = new BufferedWriter(new FileWriter(saveFile, true))

在这里插入图片描述

File

  • list()方法是返回某个目录下的所有文件和目录的文件名,返回的是String数组
  • listFiles()方法是返回某个目录下所有文件和目录的绝对路径,返回的是File数组
  • isFile() 检查表示此抽象路径名的文件是否是一个正常的文件

System

.arraycopy()

https://blog.csdn.net/wenzhi20102321/article/details/78444158

把一个数组中某一段字节数据放到另一个数组中

...arraycopy(Object src, int srcPos, Object dest, int destPos, int length)

src:源数组;

srcPos:源数组要复制的起始位置;

dest:目的数组;

destPos:目的数组放置的起始位置;

length:复制的长度.

Arrays

.asList()

asList接收的是一个泛型变长参数

public class ArraysAsListTest {
    public static void main(String[] args) {

        int[] a = {1,2,3};
        Integer[] b = {1,2,3};

        List listA = Arrays.asList(a);
        List listA1 = Arrays.asList(1,2,3);
        List listB = Arrays.asList(b);

        System.out.println(listA.size());//out:1
        System.out.println(listA1.size());//out:3
        System.out.println(listB.size());//out:3
}

Arrays的asList方法使用的ArrayList类是一个内部定义的类,而不是java.util.ArrayList类

  • 这个静态内部类存储数组元素的a变量是final类型

  • 这个静态内部类是不能做任何内部元素的添加删除操作

  • 解决 ==》

  List<String> pets = new ArrayList<String>(Arrays.asList("a", "b", "c")); 

Arrays.asList()产生的list对象会使用底层数组作为其物理实现,只要执行操作修改这个list就会修改原来的数组。要想不改变原来数组,就要在另一个容器中创建一个副本

List<String> testList = new ArrayList<String>(Arrays.asList(test));

.toString(XX)

https://blog.csdn.net/csdn_misli/article/details/53081373

Object 类的 toString 方法返回一个字符串

  • 该字符串由类名(对象是该类的一个实例)加上**“@”和此对象哈希码的无符号十六进制**表示组成

  • a.toString(),a虽然是数组名,但那是在这是一个对象实例。

Arrays的toString方法是返回指定数组内容的字符串表示形式

boolean[] a1 = new boolean[size];
Arrays.fill(a1, true);
System.out.println("a1 = " + Arrays.toString(a1));
Arrays.fill(a1, true);
System.out.println("a1 = " + a1.toString());

// a1 = [true, true, true, true, true, true]
// a1 = [Z@15db9742
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值