在javaI/O流主要分类
InputStream和OutputStream表示字节输入流和字节输出流
Reader和Writer分别表示字符输入流和字符输出流
今天主要了解字节流(InputStream和OutputStream)
字节输入流InputStream,其主要的直接子类有FileInputStream(文件输入流),ByteArrayInputStream(字节数组输入流),FilterInputStream(过滤流)
ObjectInputStream(对象输入流),PipedInputStream(管道输入流),SequenceInputStream(序列输入流)
其中过滤流又主要包括DataInputStream(数据输入流),BufferdInputStream(缓冲输入流),LineNumberInputStream(行号输入流),
PushbackInputStream(回推输入流)
InputStream中主要方法有:
FilterOutputStream(过滤输出流),ObjectIOutputStream(对象输出流),PipedOutputStream(管道输出流)字节输出流OutputStream,其主要的直接子类有FileoutputStream(文件输出流),ByteArrayOutputStream(字节数组输出流),
其中过滤流又主要包括DataOutputStream(数据输出流),BufferdOutputStream(缓冲输出流),PrintStream(打印流)
OutputStream中主要方法有:
使用流一般分为三步,下面我将先以数组流为例:
第一步 :建立流
1->建立输入流
String str = "asfasdfassa";
byte[] strBuf = str.getBytes();
ByteArrayInputStream bais = new ByteArrayInputStream(strBuf);
2->建立输出流
String s = "adsfaewtqwe";
byte[] buf = s.getBytes();
ByteArrayOutputStream baos = new ByteArrayOutputStream(strBuf);
第二步:将数据读入或写入流中
1->读入输入流
int data = bais.read();//只能从输入流中读取下一个字节
2->写入输出流中
baos.write(buf);
第三步:操作流
1->操作输入流
while(data != -1){
System.out.println(Character.toUpperCase((char)data)+" ");
data = bais.read();
}
这里如果在while里面写(data=bais.read()) != -1可以避免多余代码
2->操作输出流
System.out.println(baos.toString());
注意事项:在建立文件输出流时,有时候需要在文件末尾追加数据,那么建立流时要使用new FileOutputStream(filname,true);既设置第二个参数为true
我们也可以为基本的流操作增加过滤流操作,比如为文件流添加过滤流为流添加更多优势
FileInputStream fins = new FileInputStream(filename);
BufferedInputStream bis = new BufferedInputStream(fins);//添加缓冲流
DataInputStream dis = new DataInputStream(bis);//添加数据流
至于printStream可查看api或知其用法
字符流的分析和字节流类似,只是要知道一点,字节流通过XXXStreamReader()和XXXStreamWrite()可以转换为字符流,使用方法跟过滤流的使用方法类似。