笔记源代码地址:B站 库米豪斯巴达锅铲祖师 空间
IDEA官方已经成功帮助我修好了IDEA耶
标准输出流
其中一个标准输出流是我们从刚见到Java开始到现在一直在使用的流:System.out
,类型是PrintStream
标准输出流专门为输出而生,在输出方面没有比标准输出流更方便的了。原因主要有两点:
- 标准输出流提供了它们专有的
print
和println
方法,能够将任何类型的数据转换成字符串输出,在输出字符方面功能强大 - 标准输出流不需要关流,操作方便
除此之外,还需要知道,System.out
的指向是可以改变的。可以用System.setOut()
方法,传入一个PrintStream,就可以将out赋值,out就会指向你告诉它的文件
没啥好讲的,会用System.out.println()
就差不多会用标准输出流了
数据专用流
这两个流的使用有点困难,不是操作上的困难,而是。。。当你代码写多了翻不到的时候,它可能很考验你的记忆力
是这样啊,数据专用流可以读取或写入Java的8种数据类型加上一个String,共9种数据类型,完全是记录数据用的,适合记在那种打不开的文件里
数据流的read和write方法是没有用的,它们将这两个方法细分为11个方法(8 + 3),分别对应8种数据类型与String
数据流从文件中读写,所以数据流作为包装流使用,一般需要包FileInputStream或FileOutputSteam
一般使用时,我们会先用输出流将数据记录在文件中。这里我们按序记录一组数据
try (var dos = new DataOutputStream(new FileOutputStream(pathOut))) {
dos.writeBoolean(true);
dos.writeByte(28);
dos.writeChar('a');
dos.writeDouble(3.14);
dos.writeFloat(1.57f);
dos.writeInt(2147483647);
dos.writeShort(2018);
dos.writeLong(31415926535L);
dos.flush();
} catch (IOException e) {
e.printStackTrace();
}
(其中写入byte,char,short的方法的参数都是int,写的时候超范围不会报错,而读的时候会发生一些偏差)
文件里就出现了一堆我们看不懂的字符,但是如果用DataInputStream按顺序读取的话,我们可以原样获取这些数据。可以将代码复制下来测试
try (var dis = new DataInputStream(new FileInputStream(pathOut))) {
boolean data1 = dis.readBoolean();
byte data2 = dis.readByte();
char data3 = dis.readChar();
double data4 = dis.readDouble();
float data5 = dis.readFloat();
int data6 = dis.readInt();
short data7 = dis.readShort();
long data8 = dis.readLong();
} catch (IOException e) {
e.printStackTrace();
}
将这些数据输出后,你会发现,与我们输入的数据是相同的
然而,别忘了这个还能操作String,而对于String的操作,JDK提供了3个方法,其read或write后面跟的分别是:Bytes
,Chars
,UTF
后缀为Bytes
的方法输出方式取决于你的系统默认编码,写入时没有影响,而读取时会根据这一默认编码组装字符串
后缀Chars
的方法输出和输入障碍都不大,按照Java原来的样子把一个或两个字节拼成一个字符
后缀UTF
的方法其实是按照UTF-8编码输出和输入,其中字母占一个字节,汉字在utf-8中占3个字节。这个方法能够保证输入和输出字符编码相同,读错概率小
finally——
这俩。。太少了,再加上一个对象流又太多
还有一篇,现学的,错误可能很多