Input/OutputStream
相当底层的字节流读取器,一次读取8位二进制
InputStream // 字节输入流
OutputStream // 字节输出流
对于上面两个流对象,可以抽象地看成串口的发送和接收,一个相当原始的东西,封装一些基本方法以完成读取一个字节,发送一个字节
InputStream基本方法
// 如果读到结束则返回-1,一般作为循环的终止条件
// 无参数的read读取一个字节
// 如果加入参数b,将持续读取字节流进入b
// off地址偏置,len读取长度
int read()
int read(byte[] b)
int read(byte[] b, int off, int len)
OutputStream基本方法
// 分别为:
// 写入一个字节
// 写入字节数组的全部字节
// 写入字节数组的偏置与长度部分
void write(int b)
void write(byte[] b)
void write(byte[] b, int off, int len)
流重定向(是叫这个吗
字节流读取,不管底层的流是什么,无论是socket还是控制台,都可以
将 InputStream
重定向到 System.in
以读取控制台输入
同理 OutputStream = System.out
以向控制台输出
读取一个字节
package iostream;
import java.io.*;
import java.util.*;
public class io
{
public static void main(String[] args) throws Exception
{
InputStream is = System.in;
OutputStream os = System.out;
int r = is.read();
os.write(r);
os.close();
}
}
连续读取字节
package iostream;
import java.io.*;
import java.util.*;
public class io
{
public static void main(String[] args) throws Exception
{
InputStream is = System.in;
OutputStream os = System.out;
byte[] b = new byte[114];
is.read(b);
os.write(b);
os.close();
}
}
BufferedReader/Writer
常用的阅读器,书写器,需要底层流的支持,也就是通过在构造函数中传入底层流,比如字节流,来做到快速读取,并且封装了一些操作
优点是不在乎流的上游是什么,不管数据来源,或者将要写入到socket或者是文件
BufferedReader
类从字符输入流中读取文本并缓冲字符,也就是放进缓存
BufferedWriter
写入时,写入的是缓存,直到满才一次性输出,或者使用flush
方法,清空并且输出未满的缓存
BufferedReader
BufferedWriter
Buffer和文件读写
可以通过FileReader
与FileWriter
类来构造读取,写入文件的流,再通过BufferedReader
,BufferedWriter
将他们封装,然后可以轻松实现向文件读取/写入数据
package iostream;
import java.io.*;
import java.util.*;
public class io
{
public static void main(String[] args) throws Exception
{
Scanner scanner = new Scanner(System.in);
// 读取+缓冲流
FileReader fr = new FileReader("E:/MyEclipse/WorkSpace/Hello/src/iostream/input.txt");
BufferedReader bfr = new BufferedReader(fr);
// 写入+缓冲流
FileWriter fw = new FileWriter("E:/MyEclipse/WorkSpace/Hello/src/iostream/output.txt");
BufferedWriter bfw = new BufferedWriter(fw);
String line;
while((line=bfr.readLine())!=null)
{
System.out.println(line);
bfw.write(line);
bfw.newLine();
}
// 流写入,关闭
bfw.flush(); bfw.close(); fw.close();
bfr.close(); fr.close();
}
}