标签:方法 系统 fileinput dom tween data err 效率 示例
什么是流(Stream),流就是一系列的数据(像01010001010010这种)
当不同的介质之间有数据交互的时候,JAVA就使用流来实现。
数据源可以是文件,还可以是数据库,网络甚至是其他的程序
比如读取文件的数据到程序中,站在程序的角度来看,就叫做输入流
输入流: InputStream
输出流:OutputStream
(1)通常程序需要从外部获取/输出信息
这个“外部”范围很广,包括诸如键盘、显示器、文件、磁盘、网络、另外一个程序等。
“信息”也可以是任何类型的,例如一个对象、一串字符、图像、声音等。
(2)通过使用java.io包中的输入/输出流类就可以达到输入输出信息的目的
输入是指数据流入程序。
输出是指数据从程序流出。
(1) 字节流:数据流中最小的数据单元是字节。
(2)字符流:数据流中最小的数据单元是字符, Java中的字符是Unicode编码,一个字符占用两个字节。
(1)程序用于直接操作目标设备所对应的类叫节点流。
(2)程序通过一个间接流类去调用节点流类,以达到更加灵活方便地读写各种类型的数据,这个间接流类就是处理流。
(1)节点流是低级流,直接跟数据源相接。
处理流(也叫包装流)把节点流包装了一层,属于修饰器设计模式,不会直接与数据源相连,通过处理流来包装节点流既可以消除不同节点流的实现差异,也可以提供更方便的方法来完成输入输出。
(2)处理流的功能主要体现在以下两个方面:
1.性能的提高:主要以增加缓冲的方式来提高输入输出的效率。
2.操作的便捷:处理流可能提供了一系列便捷的方法来一次输入输出大批量的内容,而不是输入/输出一个或多个水滴处理流可以嫁接在任何已存在的流的基础上。
(1)File 文件流。对文件进行读、写操作 :FileReader、FileWriter、FileInputStream、FileOutputStream。、
(2)Memory
1)从/向内存数组读写数据: CharArrayReader与 CharArrayWriter、ByteArrayInputStream与ByteArrayOutputStream。
2)从/向内存字符串读写数据 StringReader、StringWriter、StringBufferInputStream。
(3)Pipe管道流。 实现管道的输入和输出(进程间通信): PipedReader与PipedWriter、PipedInputStream与PipedOutputStream。
- (1)Buffering缓冲流:在读入或写出时,对数据进行缓存,以减少I/O的次数:BufferedReader与BufferedWriter、BufferedInputStream与BufferedOutputStream。
- (2)Filtering 滤流:在数据进行读或写时进行过滤:FilterReader与FilterWriter、FilterInputStream与FilterOutputStream。
- (3)Converting between Bytes and Characters 转换流:按照一定的编码/解码标准将字节流转换为字符流,或进行反向转换(Stream到Reader):InputStreamReader、OutputStreamWriter。
- (4)Object Serialization 对象流 :ObjectInputStream、ObjectOutputStream。
- (5)DataConversion数据流: 按基本数据类型读、写(处理的数据是Java的基本类型(如布尔型,字节,整数和浮点数)):DataInputStream、DataOutputStream 。
- (6)Counting计数流: 在读入数据时对行记数 :LineNumberReader、LineNumberInputStream。
- (7)Peeking Ahead预读流: 通过缓存机制,进行预读 :PushbackReader、PushbackInputStream。
- (8)Printing打印流: 包含方便的打印方法 :PrintWriter、PrintStream。
【1】对I/O进行缓冲是一种常见的性能优化,缓冲流为I/O流增加了内存缓冲区,增加缓冲区的两个目的:
(1)允许Java的I/O一次不只操作一个字符,这样提高?整个系统的性能;
(2)由于有缓冲区,使得在流上执行skip、mark和reset方法都成为可能。
【2】缓冲流:它是要“套接”在相应的节点流之上,对读写的数据提供了缓冲的功能,
提高了读写的效率,同时增加了一些新的方法。例如:BufferedReader中的readLine方法,
BufferedWriter中的newLine方法。
【3】J2SDK提供了4种缓存流,常用的构造方法为:
//字符输入流 BufferedReader(Reader in)//创建一个32字节的缓冲区 BufferedReader(Reader in, int size)//size为自定义缓存区的大小 //字符输出流 BufferedWriter(Writer out) BufferedWriter(Writer out, int size) //字节输入流 BufferedInputStream(InputStream in) BufferedInputStream(InputStream in, int size) //字节输出流 BufferedOutputStream(OutputStream in) BufferedOutputStream(OutputStream in, int size)
【4】其他
(1)缓冲输入流BufferedInputSTream除了支持read和skip方法意外,还支持其父类的mark和reset方法;
(2)BufferedReader提供了一种新的ReadLine方法用于读取一行字符串(以\r或\n分隔);
(3)BufferedWriter提供了一种新的newLine方法用于写入一个行分隔符;
(4)对于输出的缓冲流,BufferedWriter和BufferedOutputStream,写出的数据会先在内存中缓存,
使用flush方法将会使内存的数据立刻写出。
示例1:
import java.io.*; public class TestBufferStream1 { public static void main(String[] args) { try { FileInputStream fis = new FileInputStream( "d:\\JavaProject\\demo13\\ProcessingStream\\TestBufferStream1.java"); BufferedInputStream bis = new BufferedInputStream(fis); int c = 0; System.out.println((char)bis.read()); System.out.println((char)bis.read()); bis.mark(100);/*在当前输入流的当前位置上做一个标志,允许最多再读入100个字节*/ for(int i=0;i<=10 && (c=bis.read())!=-1;i++){ System.out.print((char)c+" "); } System.out.println(); bis.reset();/*把输入指针返回到以前所做的标志处*/ for(int i=0;i<=10 && (c=bis.read())!=-1;i++){ System.out.print((char)c+" "); } bis.close(); } catch (IOException e) {e.printStackTrace();} } }
示例2:
import java.io.*; public class TestBufferStream2 { public static void main(String[] args) { try{ BufferedWriter bw = new BufferedWriter(new FileWriter("D:\\JavaProject\\demo13\\BufferStream\\dat2.txt")); BufferedReader br = new BufferedReader(new FileReader("D:\\JavaProject\\demo13\\BufferStream\\dat2.txt")); String s = null; for(int i=0;i<10;i++) { s = String.valueOf(Math.random());//产生一个小于1的正的随机数,并转换成字符串形式 bw.write(s);//把字符串s写入到dat2.txt文件中 bw.newLine();//写入一个行分隔符 } bw.flush();//使用flush方法将会使内存的数据立刻写出 while((s=br.readLine()) != null) { System.out.println(s); } bw.close(); br.close(); } catch(IOException e) { e.printStackTrace(); } } }
标签:方法 系统 fileinput dom tween data err 效率 示例
原文地址:https://www.cnblogs.com/rozen-lin/p/14333635.html