---------------------- 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)中的错误。 这是一个最小...
Java IO(Input/Output)是Java编程语言中用于处理输入和输出操作的重要组成部分。它提供了丰富的类库,允许程序员在各种设备、文件、网络连接之间进行数据传输。在这个主题中,我们将深入探讨Java IO的基本概念、...
Java IO流是Java平台中用于处理输入输出操作的核心部分,它允许程序与各种数据源(如文件、设备、网络)进行交互。IO流在Java中分为两大类:字节流和字符流,每种流又有输入流和输出流之分。字节流处理的是8位的字节...
Java-IO操作共19页的笔记详细介绍了这一关键领域,旨在帮助开发者掌握如何有效地读取、写入和管理数据。Java IO API提供了一套丰富的类和接口,使得开发者可以方便地进行文件读写、网络通信、流处理等操作。 1. **...
综上所述,Piped-Backend可能是一个使用Java编写的系统,它利用了Netty来构建高效的网络通信管道,并可能集成IPFS以支持分布式文件存储。SponsorBlock的功能可能被整合进这个管道架构中,用于处理和过滤视频内容。...
Java I/O(输入/输出)是Java编程语言中用于处理数据流的重要部分,它允许程序与外部资源(如文件、网络、硬件设备等)进行通信。`JavaIODemo-master.zip`是一个包含Java I/O示例代码的项目,可能是为了帮助开发者...
Java中的IO流是程序与外部资源交互的重要工具,它涵盖了数据的输入与输出操作,包括从硬盘、网络、内存等地方读取数据以及向这些地方写入数据。本课件全面探讨了Java IO流系统,旨在帮助开发者深入理解并熟练掌握这...
Java的IO系统是Java平台中处理输入和输出的重要部分,它允许程序与外部资源进行数据交换,如文件、网络连接、设备等。IO系统的核心在于流(Stream),它定义了一种从源到目的地的数据传输机制。 1. **Input 和 ...
标题中的“piped piped串口映射工具”是指一个用于串口通信的软件工具,它允许用户在不同的端口之间建立数据传输的桥梁。在IT行业中,串口(Serial Port)是计算机硬件的一种接口,常用于设备间的通信,如打印机、...
在Java编程语言中,`IO流`(Input/Output流)是处理数据输入与输出的核心概念。`IO流`允许程序读取或写入数据到各种类型的源和目标,如键盘、显示器、文件、网络连接等。本部分的io流详解内容主要涵盖以下几个方面:...
虽然Piped的描述中提到了对Cisco设备的支持,但特别提到了华为设备,这可能意味着Piped在与华为网络设备的兼容性方面做了优化。华为作为全球领先的网络设备供应商,其设备广泛应用于企业网络中。Piped能够轻松配置...
Java IO流是Java平台中处理输入输出操作的核心机制,它为数据传输提供了高效且灵活的方式。在Java中,一切输入输出都围绕着“流”进行,流是数据传输的抽象概念,代表数据的序列,可以是文件、网络、内存等不同来源...
Java IO API包含了许多类和接口,如InputStream、OutputStream、Reader、Writer等,它们构成了Java处理数据输入和输出的基础框架。 1. 字节流:字节流是Java IO中最基础的部分,它处理的是8位字节的数据。...
Java IO 输入输出流是Java平台基础架构的重要组成部分,它提供了处理数据输入和输出的能力,使得程序可以与外部设备(如硬盘、网络、内存等)进行数据交换。在Java中,一切皆为对象,因此IO流操作也被设计为面向对象...
Java程序员面试笔试真题库是求职者准备Java开发职位面试的重要参考资料,包含了各种技术领域的问题,旨在测试候选人的基础知识、编程能力以及实际问题解决技能。这份资料可能涵盖多个主题,如核心Java、集合框架、多...
在Java复习中,了解并掌握这些基础知识至关重要。 1. **多线程**:Java语言的一个显著特点是支持多线程机制,这意味着一个Java程序可以同时执行多个任务。在Java中,可以通过继承Thread类或者实现Runnable接口来...
Java的高级IO流特性是Java开发中的重要组成部分,它提供了高效、灵活的数据输入输出机制。在Java中,I/O(Input/Output)流是用于处理数据传输的核心概念,包括读取文件、网络通信、处理系统资源等场景。本文将深入...
Java IO流是Java平台中用于处理输入输出操作的核心机制,它允许...在分析给定的压缩包文件“file-io-app”和“io-app2”,我们可以预期它们可能包含了一些示例代码或练习项目,用于演示和练习Java IO流的各种使用方法。
Java中的IO流是用于处理数据输入和输出的重要工具,它提供了多种类和接口来支持不同类型的流操作。在Java中,处理流的类主要集中在`java.io`包中。以下是根据给定题目内容梳理出的一些关键知识点: 1. **包分类**:...
【Java 输入与输出流知识点详解】 Java 输入与输出流是Java I/O框架的核心部分,用于在不同数据源之间传输数据,如文件、网络、内存缓冲区等。它们分为字节流和字符流两大类,各自都有输入流和输出流。 1. **字节...