`
xiao1zhao2
  • 浏览: 39025 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java中的IO:节点流的使用

阅读更多

目录

1.文件字节流
2.文件字符流
3.字节数组流
4.管道流

 

1.文件字节流
1.1FileIputStream输入流
read() 从此输入流读取一个字节,返回读取的数据字节,达到文件末尾则返回-1.
read(Byte[] b) 从此输入流读取b.length个字节存入b中,返回读取到的有效字节个数,达到文件末尾则返回-1.
close() 关闭此输入流并释放资源
1.2FileOutputSteam输出流
write(int b) 将指定字节写入到此输出流
write(byte[] b, int off, int len) 将指定byte数组中从off开始的len个字节写入到此输出流
flush() 刷新此输出流并强制写出所有缓冲的输出字节
close() 关闭此输出流并释放资源
1.3实现文件复制
public class FileStreamDemo {

	// 每次读写一个字节
	public static void copy1(File src, File dest) throws IOException {
		FileInputStream fis = new FileInputStream(src);
		FileOutputStream fos = new FileOutputStream(dest);
		int value = fis.read();
		while (value != -1) {
			fos.write(value);
			value = fis.read();
		}
		fos.close();
		fis.close();
	}

	// 每次读写字节数组
	public static void copy2(File src, File dest) throws IOException {
		FileInputStream fis = new FileInputStream(src);
		FileOutputStream fos = new FileOutputStream(dest);
		byte[] temp = new byte[1 << 15];
		int value = fis.read(temp);
		while (value != -1) {
			fos.write(temp, 0, value);
			value = fis.read(temp);
		}
		fos.close();
		fis.close();
	}

	public static void main(String[] args) throws IOException {
		copy1(new File("c:\\a1.txt"), new File("d:\\b1.txt"));
		copy2(new File("c:\\a2.jpg"), new File("d:\\b2.jpg"));
	}
}

 

2.文件字符流

字符流与字节流的用法基本相同,是为了更便捷的读写文字,但是对于其他资源或文件读写会发生错误.利用字符流实现文件复制:

public class File_Reader_Writer {

	// 通过字符流复制文本文件
	public static void copy3(File src, File dest) throws IOException {
		FileReader fr = new FileReader(src);
		FileWriter fw = new FileWriter(dest);
		// 通过char类型数组读写
		char[] temp = new char[1 << 15];
		int value = fr.read(temp);
		while (value != -1) {
			fw.write(temp, 0, value);
			value = fr.read(temp);
		}
		fw.close();
		fr.close();
	}

	public static void main(String[] args) throws IOException {
		copy3(new File("c:\\a3.txt"), new File("d:\\b3.txt"));
	}
}

 

3.字节数组流
3.1字节数组输入流ByteArrayInputStream

面向数组,读方法与文件流相似.例:

public class ByteArrayInputStreamDemo {

	public static void main(String[] args) throws IOException {
		byte[] b = new byte[] { 23, 4, 54, 46, 78, 46, 78, 34, 84, 4 };
		ByteArrayInputStream bis = new ByteArrayInputStream(b);
		int temp = 0;
		while ((temp = bis.read()) != -1) {
			System.out.println(temp);
		}
	}
}
3.2字节数组输入流ByteArrayOutputStream

写方法除了write()以外,还提供了toByteArray()的方法,将输出流中的有效内容复制到该数组中.例:

public class ByteArrayOutputStreamDemo {

	public static void main(String[] args) throws IOException {
		final Random r = new Random();
		ByteArrayOutputStream bos = new ByteArrayOutputStream();
		for (int i = 0; i < 10; i++) {
			bos.write(r.nextInt(100));
		}
		byte[] b = bos.toByteArray();
		System.out.println(Arrays.toString(b));
	}
}

 

4.管道流

管道流常用于线程,并且输入流和输出流需要建立联系.例:

public class PipedStreamDemo {

	public static void main(String[] args) throws Exception {
		// 创建线程任务
		Send s = new Send();
		Receive r = new Receive();
		// 连接两个管道流
		s.getOut().connect(r.getIn());
		// 启动线程
		new Thread(s).start();
		new Thread(r).start();
	}
}

class Send implements Runnable {
	private PipedOutputStream out = new PipedOutputStream();

	public PipedOutputStream getOut() {
		return out;
	}

	@Override
	public void run() {
		String message = "This is a PipedStream";
		try {
			out.write(message.getBytes());
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

class Receive implements Runnable {
	private PipedInputStream in = new PipedInputStream();

	public PipedInputStream getIn() {
		return in;
	}

	@Override
	public void run() {
		byte[] b = new byte[1 << 10];
		int length = 0;
		try {
			length = in.read(b);
		} catch (IOException e) {
			e.printStackTrace();
		}
		System.out.println(new String(b, 0, length));
	}
}

 运行结果:This is a PipedStream

1
1
分享到:
评论

相关推荐

    JAVA IO流技术

    节点流:可以直接从数据源或目的地读写数据。 处理流:不直接连接到数据源或目的地,是处理流的流。通过对其他流的处理提高程序的性能。 节点流和处理流的关系: 节点流处于io操作的第一线,所有操作必须通过他们...

    Java基础篇:IO流.pdf

    该文档主要整理了Java IO流的相关信息,主要包括IO流的按照不同维度的分类、节点流、处理流、输入输出流的处理过程、抽象基类的使用等细节内容

    JAVA_IO操作总结——节点流和处理流.pdf

    JAVA_IO操作总结——节点流和处理流.pdf JAVA_IO操作总结——节点流和处理流.pdf

    java IO流总结.md

    java I/O流的总结 ...节点流:直接从数据源或目的地读写数据 处理流:不直接连接到数据源或目的地,而是“连接”在已存在的流(节点流或处理流)之上,通过对数据的处理为程序提供更为强大的读写功能。......

    Java中IO流简介_动力节点Java学院整理

    Java io系统的设计初衷,就是为了实现“文件、控制台、网络设备”这些io设置的通信。例如,对于一个文件,我们...而到了java 1.1,为了与国际化进行接轨,在java io中添加了许多以字符(Unicode)为单位进行操作的类。

    java io操作大全

    java技术 、IO流的三种分类方式 1.按流的方向分为:输入流和输出流 2.按流的数据单位不同分为:字节流和字符流 3.按流的功能不同分为:节点流和处理流

    Java IO复用_动力节点Java学院整理

    对于服务器的并发处理能力,我们需要的是:每一毫秒服务器都能及时处理这一毫秒内收到的数百个不同...服务器的并发编程所追求的就是处理的并发连接数目无限大,同时维持着高效率使用CPU等资源,直至物理资源首先耗尽。

    java数据流总结

    java数据流总结,java io流总结,节点流和处理流 java数据流总结,java io流总结,节点流和处理流 java数据流总结,java io流总结,节点流和处理流

    Java基础[05-IO流].ppt

    JavaIO流,是一种计算机用语。主要是用于处理数据的传输。1.按流的方向分为:输入流和输出流 2.按流的数据单位不同分为:字节流和字符流 3.按流的功能不同分为:节点流和处理流

    Java IO流的很简单的介绍

    流可以根据数据单位分为字节流和字符流,根据数据流方向分为输入流和输出流,根据功能分为字节流和处理流,节点流直接从文件中读取或写入字节流,处理流对已存在的流(节点流和处理流)通过对数据的处理为程序提供更...

    Java IO 体系.md

    - 节点流和处理流 - Java IO 的核心类 File - Java IO 流对象 - 字节流对象 - InputStream - OutputStream - 字符流对象 - Reader - Writer - 字节流与字符流的转换 - 新潮的 NIO - 缓冲区(Buffer) -...

    java.io 流详解,配许多具体实例。

    程序详细讲解了java流的具体知识,包括字节流,字符流,转化流,节点流,处理流,转换流,数据流,及可序列化的Object流。每个例子,都包含一个readme.txt文件,此文件包含对每个例子的功能解释,和重要的代码实现。

    IO流体系继承结构图_动力节点Java学院整理

    Java IO体系结构看似庞大复杂,其实有规律可循,要弄清楚其结构,需要明白两点: 1. 其对称性质:InputStream 与 OutputStream, Reader 与 Writer,他们分别是一套字节输入-输出,字符输入-输出体系 2. 原始处理器(适配器)...

    IO笔记.zip关于javaIO流部分的详细笔记

    这是关于java各个IO流,从节点流到装饰缓冲流的一系列笔记纲要,帮助更好的理解和学习java的IO流

    Java流(文件读写操作)

    一、 流的分类 • 按数据流动方向 – 输入流:只能从中读取字节数据,而不能向其写出数据 – 输出流:只能向其写入字节数据,而不能从中读取数据 ...– 节点流:从/向一个特定的IO设备读/写数据的流。(低级流) – 处理

    java IO流学习笔记——(1)文件字节流

    • 节点流:可以直接从数据源或目的地读写数据 • 处理流(包装流):不直接连接到数据源或目的地,是其他流进行封装。 目的主要是简化操作和提高性能。 • 节点流和处理流的关系: ① 节点流处于io操作的第一线,所有...

    cljs-node-io:用于NodeJS的ClojureScript IO库

    您可以还包括: 与Java具有相同api的经过精化的文件++吐节点流,子进程上的包装器便捷功能使您的脚本编写和替换体验更加愉快用编译,以便所有的核心异步都是引导友好的在您的REPL会话和脚本中( require '[cljs-node...

    Java中的IO流(二)字符流的常用操作

    字符流的分类①节点流②处理流③流的使用一般步骤④流的关闭字符流具体使用Ⅰ文件流①从文件中读取字符①将字符写入文件Ⅱ字符串流Ⅲ字符数组流Ⅳ缓冲流Ⅴ转换流Ⅵ字符打印流最后 前言 今天带来的是JAVA的IO流中的...

    java IO章节的总结

    但是直接用这些来操作是比较麻烦的,而且一个字节一个字节的对文件处理,对硬盘的读取和存入对硬盘的损伤是很大的,因此需要对这些节点流进行包装,即外套一些处理流来进行操作,InputStream有以下处理流: ...

Global site tag (gtag.js) - Google Analytics