3.3.4:properties: 配置文件
- java.util.Properties是Hashtable的子类,Properties类表示一组持久的属性。
- Properties可以保存到流中或从流中加载。
- 属性列表中的每个键及其对应的值都是一个字符串。
可以通过读取文件中内容得到properteis的key和value,通过load()方法读取文件.
构造器:
Properties() ;创建一个空的属性列表
常用方法 :
- getProperty(String key);通过key获得属性值
- etProperty(String key ,String value); 给属性列表设置属性值和属性名
- ist(PrintStream out);将属性列表打印到指定的输出流
- oad(InputStream in);将io流中数据读取得到属性列表
- Set<String> = stringPropertyName();//获得所有的key
3.4:字节流:PipedInputStream/PipedOutputStream 管道输入/输出流。一般结合线程来用。
问题一:管道输入/输出流,这个输入/输出是相对于谁来说。
答 :相对于当前代码来说。
问题二:管道输入流/输出流 怎么连接起来。
答 :创建对象的时候用构造器传值就可以了。
3.5: 字节包装流 : BufferedInputStream/BufferedOutputStream 有缓冲区的包装流 (装饰模式)
特点:有缓冲区的包装流效率会高一些,可以使用mark和reset功能(标记 回读 功能)
提高效率的原因:BufferedInputStream对外提供滑动读取的功能实现,通过预先读入一整段原始输入流数据至缓冲区中,而外界对BufferedInputStream的读取操作实际上是在缓冲区上进行,如果读取的数据超过了缓冲区的范围,那么BufferedInputStream负责重新从原始输入流中载入下一截数据填充缓冲区,然后外界继续通过缓冲区进行数据读取。这样的设计的好处是:避免了大量的磁盘IO,因为原始的InputStream类实现的read是即时读取的,即每一次读取都会是一次磁盘IO操作(哪怕只读取了1个字节的数据),可想而知,如果数据量巨大,这样的磁盘消耗非常可怕。而通过缓冲区的实现,读取可以读取缓冲区中的内容,当读取超过缓冲区的内容后再进行一次磁盘IO,载入一段数据填充缓冲,那么下一次读取一般情况下就直接可以从缓冲区读取,减少了磁盘IO。
- 1:构造器 new BufferedInputStream(字节流,缓冲区大小);//默认缓冲大小是8192字节
- 2:构造器 new BufferedOutputStream(字节流,缓冲区大小);//默认缓冲大小是512字节
3.6: 字节包装流 : DataInputStream/DataOutputStream 读取/写出 某个类型的数据
特点:可以一次写一个int/long/double 基本数据类型+String的数据流中,可以从流中一次读取一个基本数据类型的数据。
注意:是通过基本数据类型数据的 字节数 进行读取 ,如果a.txt中有一个字符6, 不能用readInt()去读取,因为这个6代表的字节数不是int所代表的字节数。
推荐:使用DataInputStream读取数据,最好是读取用DataOutputStream写出去的数据。不然读取不到想要的效果。
任务:利用DataOutputStream+ByteArrayOutputStream获得1000L所对应的字节数组。
3.7: 打印包装流 PrintStream 为另一个输出流添加了功能
PrintStream ps = new PrintStream(file);
常见用法例子:
// 定义一些变量,用来格式化输出。
double d = 345.678;
String s = "你好!";
int i = 1234;
// "%"表示进行格式化输出,
// "%"之后的内容为格式的定义。
// "f"表示格式化输出浮点数。
ps.printf("%f", d); //345.678000
ps.println();
// "9.2"中的9表示输出的长度,2表示小数点后的位数。 注意输出数字前面的空格
ps.printf("%9.2f", d);// 345.68
ps.println();
// "+"表示输出的数带正负号。
ps.printf("%+9.2f", d);// +345.68
ps.println();
// "-"表示输出的数左对齐(默认为右对齐)。
ps.printf("%-9.4f", d);//345.6780
ps.println();
// "+-"表示输出的数带正负号且左对齐。
ps.printf("%+-9.3f", d);//+345.678
ps.println();
// "d"表示输出十进制整数。
ps.printf("%d", i);//1234
ps.println();
// "o"表示输出八进制整数。
ps.printf("%o", i);//2322
ps.println();
// "x"表示输出十六进制整数。
ps.printf("%x", i);//4d2
ps.println();
// "#x"表示输出带有十六进制标志的整数。
ps.printf("%#x", i);//0x4d2
ps.println();
// "s"表示输出字符串。
ps.printf("%s", s);//你好!
ps.println();
ps.printf("输出一个浮点数:%f,一个整数:%d,一个字符串:%s", d, i, s);
//输出一个浮点数:345.678000,一个整数:1234,一个字符串:你好!
-------------------------------------------------------------------------------------------------------------------------------
3.8: 字符流 : CharArrayReader/CharArrayWriter:有缓冲区的字符输入/输出流.
特点:可使用 toCharArray() 和 toString() 获取数据。
3.9: 字符流 :FileReader/FileWriter
特点:每次读取的是字符,可以查看,可以操作。
3.10: 字符流 :
PrintStream:和PrintWriter类似
BufferedReader : 读取一行
PrintWriter :写出一行
3.10: 转换流 :InputStreamReader 字节输入流转换为字符输入流:
OutputStreamWriter 字节输出流转换为字符输出流:
特 点 : 将字节流转换为字符流的时候可以设置编码。