资源预览内容
第1页 / 共5页
第2页 / 共5页
第3页 / 共5页
第4页 / 共5页
第5页 / 共5页
亲,该文档总共5页全部预览完了,如果喜欢就下载吧!
资源描述
12345678910111213141516171819202122232425262728123456789101112131415将输出流OutputStream转化为输入流InputStream的方法package test.io;import java.io.ByteArraylnputStream;import java.io.ByteArrayOutputStream;impor t java.io.IOException;/* 用于把 OutputStream 转化为 Inputstream。*适合于数据量不大,且内存足够全部容纳这些数据的情况。* author 赵学庆 www.java2000.net*/public class Testi /* param args* throws IOException*/public static void main(String args) throws IOException ByteArrayOutputStream out = new ByteArrayOutputStream();byte bs = new byte 1, 2, 3, 4, 5 ;out.write(bs);ByteArrayInputStream in = new ByteArrayInputStream(out.toByteArray() byte bs = new byte1024;int len = in.read(bs);for (int i = 0; i len; i+) System.out.println(bsi); package test.io;impor t java.io.IOException;impor t java.io.PipedInputStream;import java.io.PipedOutputStream;/*用于把OutputStream转化为InputStream。适合于数据量大的情况,一个类专门负责产生数据,另一个类负责读取数据。* author 赵学庆 www.java2000.net*/public class Test2 /* param args* throws IOException*/public static void main(String args) throws IOException 16171819202122232425262728293031323334353637383940414243444546474849505152535455/使用Piped的输入输出流PipedInputStream in = new PipedInputStream。;final PipedOutputStream out = new PipedOutputStream(in);/启动线程,让数据产生者单独运行new Thread(new Runnable() public void run() try byte bs = new byte 2;for (int i = 0; i = 100; i+) bs0 = (by te) i;bsl = (by te) (i + 1);/测试写入字节数组out.write(bs);out.flush();/等待0.1秒Thread.sleep(lOO); catch (IOException e) e.printStackTrace(); catch (InterruptedException e) e.printStackTrace();).start();/数据使用者处理数据/也可以使用线程来进行并行处理byte bs = new byte1024;int len;/读取数据,并进行处理try while (len = in.read(bs) != -1) for (int i = 0; i len; i+) System.out.println(bsi); catch (IOException e) e.printStackTrace();下面是关于PipedOutputStream的API介绍传送输出流可以连接到传送输入流,以创建通信管道。 象,并由其他线程从连接的PipedInputStream读取。传送输出流是管道的发送端。通常,数据由某个线程写入PipedOutputStream对 不建议对这两个对象尝试使用单个线程,因为这样可能会死锁该线程。下面是关于PipedInputStream的API介绍传送输入流应该连接到传送输出流;传送输入流会提供要写入传送输出流的所有数据字节。通常,数据由某个线程从PipedInputStream对 象读取,并由其他线程将其写入到相应的PipedOutputStream。不建议对这两个对象尝试使用单个线程,因为这样可能会死锁该线程。传 送输入流包含一个缓冲区,可在缓冲区限定的范围内将读操作和写操作分离开。123456789101112131415161718192021222324252627282930313233343536373839404142434445464748package test.io;impor t java.io.IOException;impor t java.io.InputStream;impor t java.io.OutputStream;impor t com.Ostermiller.util.CircularByteBuffer;/* 用于把 OutputStream 转化为 InputStream。* * 使用 CircilarBuffer 辅助类 * 下载地址为 * 介绍地址为 http:/ostermiller.org/utils/CircularBuffer.html* * author 赵学庆 www.java2000.net*/public class Test3 /* param args* throws IOException*/public static void main(String args) throws IOException / 使用 CircularByteBufferfinal CircularByteBuffer cbb = new CircularByteBuffer。;/启动线程,让数据产生者单独运行new Thread(new Runnable() public void run() try OutputStreamClass3.putDataOnOutputStream(cbb.getOutputStream(); catch (IOException e) e.printStackTrace();).start();/数据使用者处理数据/也可以使用线程来进行并行处理 InputStreamClass3.processDataFromInputStream(cbb.getInputStream();class OutputStreamClass3 public static void putDataOnOutputStream(OutputStream out) throws IOException byte bs = new byte 2;for (int i = 0; i = 100; i+) bs0 = (by te) i;bs1 = (by te) (i + 1);/测试写入字节数组out.write(bs);out.flush();49505152535455565758596061626364656667686970717273try /等待0.1秒 Thread.sleep(lOO); catch (InterruptedException e) e.printStackTrace();class InputStreamClass3 public static void processDataFromInputStream(InputStream in) byte bs = new byte1024;int len;/读取数据,并进行处理try while (len = in.read(bs) != -1) for (int i = 0; i len; i+) System.out.println(bsi); catch (IOException e) e.printStackTrace();747576777879808182838485868788899091929394 此方法使用了一个类处理,代码更简洁,可以很方便的在缓冲处理全部数据的小数据量情况和多线程处理大数据量的不同情况切换 package test.io;impor t java.io.IOException;impor t java.io.InputStream;impor t java.io.OutputStream;impor t com.Ostermiller.util.CircularByteBuffer;/* 用于把 OutputStream 转化为 InputStream。* * 使用 CircilarBuffer 辅助类 * 下载地址为 * 介绍地址为 http:/ostermiller.org/utils/CircularBuffer.html
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号