1、概念
System.out作为PringStream打印流类的对象实现标准输出,可以调用它的print、println、write方法来输出各种类型的数据。
print和println的参数完全一样,不同之处在于println输出后换行,而print不换行。
write方法用来输出字节数组,在输出时不换行。
它的结构关系如下:
其祖先OutputStream类有如下方法:
其中对于write(byte[] b, int off, int len)方法参数说明:
b
- 数据。
off
- 数据中的初始偏移量。
len
- 要写入的字节数。
然而在PrintStream中重写了write方法
public void write(byte[] buf,
int off,
int len)从指定的字节数组写入len字节,从偏移量off开始到此流。 如果启用自动冲洗,则将调用flush方法。
其对于重写后write方法参数的说明:
buf
- byte 数组
off
- 相对于开始写入字节处的偏移量
len
- 要写入的字节数
2、案例
案例说明:从idea控制台输入数据,通过标准的输入读取,然后再通过标准的输出进行写出.
1.代码实现
package com.zhaoyunlong.system;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
public class printout {
public static void main(String[] args) {
InputStream inputStream = System.in;// 标准的输入流对象 --读取操作
OutputStream outputStream = System.out;// 标准的输出流对象---写的操作
try {
byte[] buffer = new byte[10]; // 缓冲区 // 0 1 2 3 4 5 6 7 8 9
int len = 0;// 读取之后的实际长度 //在UTF8编码下,回车\r 换行\n 也各占1个字节
/*
* read方法参数: b - 读入数据的缓冲区。 off - 数组b中将写入数据的初始偏移量。 len - 要读取的最大字节数。
*/
while ((len = inputStream.read(buffer, 0, 4)) != -1) { //读取操作
System.out.println("读取的实际长度--------------------------" + len);
outputStream.write(buffer, 0, 4); //写出的操作
System.out.println("--------------------------");
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
备注说明:此程序处于一直堵塞的状态,所以没有进行输入流和输出流的关闭操作
结果输出:
说明:
1.在UTF-8编码下,回车 \r 占一个字节,当在控制台进行回车操作时会向输入流中写入这个编码
2.程序在读取完数据后会留存buffer缓冲区中,回车替代了1 而234没有覆盖,所以输出了234