---------------------- ASP.Net+Android+IO开发S、.Net培训、期待与您交流! ---------------------
在IO中还有一些更特殊的流对象
1、PipedInputStream和PipedOutputStream
这两个流对象,在创建的时候必须是成对出现的,一般用于多线程,一个线程写数据,一个线程读数据。然后配合每个线程所有的其他IO流来达到多线程间的数据传递。Piped流只要有一个不再活动时,则该管道就被视为损毁。一般的创建格式为:
public class TestPipedStream { public static void main(String[] args) { PipedInputStream inputStream = new PipedInputStream();//创建管道读取流 PipedOutputStream outputStream = null; try { outputStream = new PipedOutputStream(inputStream); //创建管道写入流,并连接读取流 } catch (IOException e) { e.printStackTrace(); } new Thread(new PipedIn(inputStream)).start();//开启读取线程 new Thread(new PipedOut(outputStream)).start();//开启写入线程 } } class PipedIn implements Runnable{ PipedInputStream inputStream ; public PipedIn(PipedInputStream inputStream){ this.inputStream = inputStream; } public void run() } class PipedOut implements Runnable{ PipedOutputStream outputStream; public PipedOut(PipedOutputStream outputStream){ this.outputStream = outputStream; } public void run() }
2、RandomAccessFile
这个流更厉害了,一般的流都是从文件的头读取到尾,或者从头写到尾,而且只有读或者写的功能;这个流则可以随便从文件的那个部分开始读写,而且这一个类里边既有读又有些的功能,这些功能非常全面,可以读写一个字节,还可以读写一个基本数据类型,还可以读写一个UTF字符串,很强大有木有。另外,关联文件的读写权限还可以用这个类来设置哦。这里有一个例子
/** * 本例子的目的是在键盘输入人名和年龄,以逗号分开,存储到指定文件上, * 并且姓名不限制中英文。然后还可以在指定文件上取出人名和年龄, * 这个其实可以封装成一个工具类,大家可以试试,在创建类的时候知道文件路径就可以。 */ package test; import java.io.*; public class RandonAccessFileDemo { public static void main(String[] args) throws IOException { writeFile(); readFile(); } public static void writeFile() throws IOException { File file = new File("d:\\ran.txt"); if (file.exists()) file.delete(); RandomAccessFile raf = new RandomAccessFile(file, "rw");//关联一个文件 BufferedReader br = new BufferedReader(new InputStreamReader(System.in));//控制台输入 System.out.println("请输入用户名和年龄,以逗号隔开,结束请输入over"); String line = null; while ((line = br.readLine()) != null) { // 结束标记 if ("over".equals(line.toLowerCase())) break; String[] strs = line.split(",");//将输入的字符串分解 raf.write(new Byte((byte) 0));//先写入一个字节作为初始判断标记 raf.writeUTF(strs[0]);//写入姓名 raf.writeInt(Integer.parseInt(strs[1]));//写入年龄 } raf.close(); } public static void readFile() throws IOException { RandomAccessFile raf = new RandomAccessFile("d:\\ran.txt", "r"); raf.seek(0); String name = null; int ch = -1; while ((ch = raf.read()) != -1) {//判断数据有没有到结尾 name = raf.readUTF();//读取姓名 int age = raf.readInt();//读取年龄 System.out.println("name: " + name); System.out.println("age : " + age); } raf.close(); } }
3、SequenceInputStream
这个流可以将多个输入流结合成一个输入流,它从输入流的有序集合开始,并从第一个输入流开始读取,直到到达文件末尾,接着从第二个输入流读取,依次类推,直到到达包含的最后一个输入流的文件末尾为止。
它有两个构造函数
SequenceInputStream(Enumeration<? extends InputStream> e)
SequenceInputStream(InputStream s1, InputStream s2)
第二个很好看懂,关键是第一个,当我们有两个以上的输入流需要读取到一个目的地时,则可以用第一个构造方法来构造SequenceInputStream,而InputStream的Enumeration也可以通过不同方法来构建。举例两种:
- 利用集合框架中的工具类Collections,
package test; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.SequenceInputStream; import java.util.ArrayList; import java.util.Collections; import java.util.Enumeration; public class TestSequenceStream { public static void main(String[] args) throws Exception { FileInputStream fis1 = new FileInputStream("d:/1.txt"); FileInputStream fis2 = new FileInputStream("d:/2.txt"); FileInputStream fis3 = new FileInputStream("d:/3.txt"); ArrayList<FileInputStream> aList = new ArrayList<FileInputStream>(); aList.add(fis1); aList.add(fis2); aList.add(fis3); //就这一步,使用集合的工具类 Enumeration<FileInputStream> en = Collections.enumeration(aList); SequenceInputStream sis = new SequenceInputStream(en); FileOutputStream fos = new FileOutputStream("D:/合体.txt"); byte[] buf = new byte[1024]; int len = 0; while((len = sis.read(buf)) != -1 ){ fos.write(buf, 0, len); } sis.close(); fos.close(); } }
- 利用内部类形式
package test; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.SequenceInputStream; import java.util.ArrayList; import java.util.Enumeration; import java.util.Iterator; public class TestSequenceStream { public static void main(String[] args) throws Exception { FileInputStream fis1 = new FileInputStream("d:/1.txt"); FileInputStream fis2 = new FileInputStream("d:/2.txt"); FileInputStream fis3 = new FileInputStream("d:/3.txt"); ArrayList<FileInputStream> aList = new ArrayList<FileInputStream>(); aList.add(fis1); aList.add(fis2); aList.add(fis3); //这一步用的是内部类 final Iterator<FileInputStream> iterator = aList.iterator(); Enumeration<FileInputStream> en = new Enumeration<FileInputStream>(){ public boolean hasMoreElements() { return iterator.hasNext(); } public FileInputStream nextElement() { return iterator.next(); } }; SequenceInputStream sis = new SequenceInputStream(en); FileOutputStream fos = new FileOutputStream("D:/合体1.txt"); byte[] buf = new byte[1024]; int len = 0; while((len = sis.read(buf)) != -1 ){ fos.write(buf, 0, len); } sis.close(); fos.close(); } }
---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------
详细请查看:http://edu.csdn.net
相关推荐
java-piped-streams-test 注意:所描述的错误已被报告,其状态为Won't Fix 。 有关更多信息,请参阅 。 此存储库用于演示java.io.PipedInputStream (Oracle Java 实现,存在于 1.7 和 1.8)中的错误。 这是一个最小...
piped piped串口映射工具
Java IO流学习总结 Java流操作有关的类或接口: Java流类图结构: 流的概念和作用 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象。即数据在两设备间的传输称为流,流的本质是数据...
管道式
端口映射工具。很实用的工具。有需要的请下载。无需安装,解压即可使用。Cisco,华为等主流设备,及时对于新手,也简单上手,文件体积小。适用于中小型企业网络管理员使用。
端口映射工具。很实用的工具。有需要的请下载。无需安装,解压即可使用。 华为eNSP,华三HCL国内主流设备厂家模拟器连接CRT的神器,及时对于新手,也简单上手,文件体积小。适用于中小型企业网络管理员使用。
python库。 资源全名:piped.contrib.manhole-0.1.0.tar.gz
python库。 资源全名:piped.contrib.zookeeper-0.5.1.tar.gz
HCL模拟器使用CRT连接,需要使用的都 端口映射工具。很实用的工具。有需要的请下载。
无需安装,解压即可使用。Cisco,华为等主流设备,及时对于新手,也简单上手,文件体积小。适用于中小型企业网络管理员使用。HCL模拟器使用CRT连接,需要使用的都 端口映射工具。很实用的工具。...
端口映射工具。很实用的工具。有需要的请下载。无需安装,解压即可使用。Cisco,华为等主流设备,及时对于新手,也简单上手,文件体积小。适用于中小型企业网络管理员使用。
crt连接hcl设备工具
知道下这个的基本都知道用途了,我就不多说!
数据整理的现代方法:tidyr、dplyr 和 magrittr 这是我在 ... 由于突出显示不准确,最终的 .tex 有几个手动调整,描述如下: ://stackoverflow.com/questions/29182921/force-knitr-highlighting-for-piped-functions
可配合HCL使用CRT登录设备。
Java中的PipedWriter、PipedReader类管道的读写依赖于PipedOutputStream、PipedInputStream两个管道输入输出类,这里我们将来举例讲解Java中Piped管道输入输出流的线程通信控制:
Busca-cep ... 在ViaCepClient.java的类中,引用了CEP的一些提示,例如:JSON,XML和PIPED。 杜randint(Durante)担任顾问,负责执行事务。 Os retornos devem serpersistidos em banco de dados(优
使用SecureCRT连接H3C Cloud Lab模拟器的中间件,很方便。
现阶段学习经常使用的路由交换设备主要来自于思科、华为和华三三家 厂商,当然还有中兴、锐捷、神州数码等厂商,这三家的设备操作配置大 致类似,却又不尽相同。因为实体设备通常都非常昂贵,购买设备学习也 ...
可消化的wagg电子邮件选择部署 包含通过云提供商部署相应存储库的更改所需的内容。 本地测试说明 “ docker-compose up [服务名称]”将仅运行该服务(如果其他仍在... 使用提到的1行AWS CLI Piped-to-Docker选项来获取