PrintStream:

 

PrintStream

是一个字节打印流,System.out对应的类型就是PrintStream

它的构造函数函数可以接收三种数据类型的值。

1,字符串路径。

2File对象。

3OutputStream


PrintWriter

是一个字符打印流。构造函数可以接收四种类型的值。

1,字符串路径。

2File对象。

对于12类型的数据,还可以指定编码表。也就是字符集。


3OutputStream

4Writer

对于34类型的数据,可以指定自动刷新。

注意:该自动刷新值为true时,只有三个方法可以用:println,printf,format.

//如果想要既有自动刷新,又可执行编码。如何完成流对象的包装?

PrintWriter pw =

new PrintWriter(new OutputStreamWriter(new FileOutputStream("a.txt"),"utf-8"),true);


//如果想要提高效率。还要使用打印方法。

PrintWriter pw =

new PrintWriter(new BufferdWriter(new OutputStreamWriter(new FileOutputStream("a.txt"),"utf-8")),true);

PipedInputStream

PipedOutputStream


特点

读取管道流流和写入管道流可以进行连接。

连接方式:

1,通过两个流对象的构造函数。

2,通过两个对象的connect方法。


通常两个流在使用时,需要加入多线程技术,也就是让读写同时运行。

注意;对于read方法。该方法是阻塞式的,也就是没有数据的情况,该方法会等待。

序列流,也称为合并流——SequenceInputStream:

特点:可以将多个读取流合并成一个流。这样操作起来很方便。

原理:其实就是将每一个读取流对象存储到一个集合中。最后一个流对象结尾作为这个流的结尾。


两个构造函数:

1SequenceInputStream(InputStream in1,InputStream in2)

可以将两个读取流合并成一个流。

2SequenceInputStream(Enumeration<? extends InputStream> en)

可以将枚举中的多个流合并成一个流。

作用:可以用于多个数据的合并。

想要合并使用SequenceInputStream即可。对于切割后,合并是需要的一些源文件的信息。

可以通过配置文件进行存储。该配置可以通过键=值的形式存在。

然后通过Properties对象进行数据的加载和获取。


操作数组的流对象

1、操作字节数组

      • ByteArrayInputStream

      • ByteArrayOutputStream

toByteArray();

toString();

writeTo(OutputStream);

2、操作字符数组。

      • CharArrayReader

      • CharArrayWriter

3、操作字符串

      • StringReader

      • StringWriter


对于这些流,源是内存。目的也是内存。


而且这些流并未调用系统资源。使用的就是内存中的数组。

所以这些在使用的时候不需要close


操作数组的读取流在构造是,必须要明确一个数据源。所以要传入相对应的数组。


对于操作数组的写入流,在构造函数可以使用空参数。因为它内置了一个可变长度数组作为缓冲区。


这几个流的出现其实就是通过流的读写思想在操作数组。



复合类型数据(比如:姓名、年龄、籍贯、性别等等)

编码转换

io中涉及到编码转换的流是转换流和打印流。

但是打印流只有输出。


在转换流中是可以指定编码表的。

默认情况下,都是本机默认的码表GBK. 这个编码表怎么来的?

System.out.println(System.getProperty("file.encoding"));


常见码表:

ascii:美国标准信息交换码。使用的是1个字节的7位来表示该表中的字符。


ISO8859-1:拉丁码表。使用1个字节来表示。


GB2312:简体中文码表。

GBK:简体中文码表,比GB2312融入更多的中文文件和符号。


unicode:国际标准码表。都用两个字节表示一个字符。

UTF-8:对unicode进行优化,每一个字节都加入了标识头。



编码转换:

字符串 -->字节数组 :编码。通过getBytes(charset);

字节数组-->字符串: 解码。通过String类的构造函数完成。String(byte[],charset);



这段代码是一个Java程序,实现了创建孙悟空和一批猴子的功能。在main方法中,先输出一句话,然后创建10个Monkey对象并启动它们的线程,最后再输出一句话。其中Monkey类应该是已经存在的,这里只是用到了它。 如果你想让这些猴子自报姓名,可以在Monkey类中添加一个reportName方法,在run方法中调用该方法。 下面是示例代码: ```java public class Monkey extends Thread { private String name; public Monkey(String name) { this.name = name; } public void reportName() { System.out.println(name + " reporting!"); } @Override public void run() { System.out.println(name + " is created!"); reportName(); } } public class WuKong { public static void main(String[] args) { System.out.println("俺老孙在此,妖怪休要猖狂!变……"); for (int i = 0; i < 10; i++) { new Monkey("猴爷爷" + i).start(); } System.out.println("孩儿们,上……"); } } ``` 运行这个程序,你会看到如下输出: ``` 俺老孙在此,妖怪休要猖狂!变…… 猴爷爷0 is created! 猴爷爷0 reporting! 猴爷爷1 is created! 猴爷爷1 reporting! 猴爷爷2 is created! 猴爷爷2 reporting! 猴爷爷3 is created! 猴爷爷3 reporting! 猴爷爷4 is created! 猴爷爷4 reporting! 猴爷爷5 is created! 猴爷爷5 reporting! 猴爷爷6 is created! 猴爷爷6 reporting! 猴爷爷7 is created! 猴爷爷7 reporting! 猴爷爷8 is created! 猴爷爷8 reporting! 猴爷爷9 is created! 猴爷爷9 reporting! 孩儿们,上…… ``` 你可以根据这个示例来编写你自己的程序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值