IO
https://www.liaoxuefeng.com/wiki/1252599548343744/1255945227202752
IO流是一种顺序读写数据的模式,它的特点是单向流动
以内存为中心:
- Input指从外部读入数据到内存,例如,把文件从磁盘读取到内存,从网络读取数据到内存等等。
- 硬盘上的某个文件,把内容读到内存,并且以Java提供的某种数据类型表示,例如,
byte[]
,String
,这样,后续代码才能处理这些数据。
- 硬盘上的某个文件,把内容读到内存,并且以Java提供的某种数据类型表示,例如,
- Output指把数据从内存输出到外部,例如,把数据从内存写入到文件,把数据从内存输出到网络等等。
- 因为内存有“易失性”的特点,所以必须把处理后的数据以某种方式输出,例如,写入到文件。Output实际上就是把Java表示的数据格式,例如,
byte[]
,String
等输出到某个地方
- 因为内存有“易失性”的特点,所以必须把处理后的数据以某种方式输出,例如,写入到文件。Output实际上就是把Java表示的数据格式,例如,
同步和异步
同步IO:读写IO时代码必须等待数据返回后才继续执行后续代码,
- 优点是代码编写简单,缺点是CPU执行效率低。
异步IO:读写IO时仅发出请求,然后立刻执行后续代码,
- 优点是CPU执行效率高,缺点是代码编写复杂。
Java标准库的包java.io
提供了同步IO,而java.nio
则是异步IO
InputStream
、OutputStream
、Reader
和Writer
都是同步IO的抽象类,对应的具体实现类,以文件为例,有FileInputStream
、FileOutputStream
、FileReader
和FileWriter
。
本节我们只讨论Java的同步IO,即输入/输出流的IO模型。
InputStream / OutputStream
IO流以byte
(字节)为最小单位,因此也称为字节流
Reader / Writer
如果需要读写的是字符,并且字符不全是单字节表示的ASCII字符,那按照char
来读写显然更方便,称为字符流。
Java提供了Reader
和Writer
表示字符流,字符流传输的最小数据单位是char
。
Reader
和Writer
本质上是一个能自动编解码的InputStream
和OutputStream
。
读取和写入文件
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