内存流
从内存中读出写到内存
在之前FileInputStream 和 FileOutputStream 的时候所有的操作的目标是文件,那么如果现在假设有一些临时的信息要求通过IO操作的话,那么如果将这些临时的信息保存在文件之中则肯定很不合理,因为操作的最后还要把文件再删除掉,所以此时的IO中就提供了一个内存的操作流,通过内存操作流输入和输出的目标是内存。
一个很好的案例是: 类型转换
屏幕的输入输出流
它不能被创建
可以重定向
try {
//输入重定向(测试用例用的), 可以定向到文件中去读取
System.setIn(new FileInputStream("res/test.txt"));
//输出重定向
//System.setOut();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
注意: System.in.available()不能获取到
try {
//因为存在阻塞,所以不能使用该方法获取
System.out.println(System.in.available());
} catch (IOException e) {
e.printStackTrace();
}
输入流
InputStream in = System.in;
Scanner scanner = new Scanner(System.in);
String next = scanner.next();//字符串输入, 以空白字符作为分割
System.out.println(next);
可以读取想要的类型
int i = scanner.nextInt();//如果太长会报异常
BigInteger big = scanner.nextBigInteger();//读取一个超大的数字
System.out.println(big);
BigInteger add = big.add(new BigInteger("10"));//可以进行基本运算
System.out.println(add);
打印流
/*
不能用普通的流的读取的方式去读取, 它永远不会返回-1, 可以设定特定的字符
*/
/*
屏幕输出流
*/
PrintStream out = System.out;//打印流!
try {
out.write("abc".getBytes());
} catch (IOException e) {
e.printStackTrace();
}
//System.err和System.out 碰到一块时不一定谁先执行
System.err.printf("红色的");