Java 流(Stream)简介:1、基本的输入流和输出流
2009-04-20 11:14
429 查看
本人打算写几篇文章,介绍一下流。本文是针对初学者的,加上本人水平有限,所以不敢说写得很高深。如果你是初学者,而且对流这个东西很头疼,你就应该看看这个。
本文发表在:http://blog.csdn.net/YidingHe,转载请保留出处。
流是 Java 中最重要的基本概念之一。文件读写、网络收发、进程通信,几乎所有需要输入输出的地方,都要用到流。
流是做什么用的呢?就是做输入输出用的。为什么输入输出要用“流”这种方式呢?因为程序输入输出的基本单位是字节,输入就是获取一串字节,输出就是发送一串字节。但是很多情况下,程序不可能接收所有的字节之后再进行处理,而是接收一点处理一点。比方你下载魔兽世界,不可能全部下载到内存里再保存到硬盘上,而是下载一点就保存一点。这时,流这种方式就非常适合。
在 Java 中,每个流都是一个对象。流分为两种:输入流(InputStream)和输出流(OutputStream)。对于输入流,你只要从流当中不停地把字节取出来就是了;而对于输出流,你只要把准备好的字节串传给它就行。
______________Java 程序____________
| |
外部系统 --|--(输入流)--> 处理逻辑 --(输出流)---|--> 外部系统
|_________________________________|
流对象是怎么获得的呢?不同的外部系统,获取流的方式也不同。例如,文件读写就要创建 FileInputStream/FileOutputStream 对象,而网络通信是通过 Socket 对象来获取输入输出流的。一般来说,如果一个类有 getInputStream() 或 getOutputStream() 这样的方法,就表明它是通过流对象来进行输入输出的。
InputStream 是输入流,下面是一个通过 InputStream 读取文件的例子:
虽然写得很啰嗦,但这确实是 InputStream 的基本用法。注意,这只是一个例子,说明如何从输入流中读取字节串。实际上,Java 提供更简单的方式来读取文本文件。以后将会介绍。
相比从流中读取,使用 OutputStream 输出则是非常简单的事情。下面是一个例子:
Java 还提供其它的流操作方式,但它们都是对 InputStream 和 OutputStream 进行扩展或包装。所以这两个类是基础,必须要理解它们的使用。
本文发表在:http://blog.csdn.net/YidingHe,转载请保留出处。
流是 Java 中最重要的基本概念之一。文件读写、网络收发、进程通信,几乎所有需要输入输出的地方,都要用到流。
流是做什么用的呢?就是做输入输出用的。为什么输入输出要用“流”这种方式呢?因为程序输入输出的基本单位是字节,输入就是获取一串字节,输出就是发送一串字节。但是很多情况下,程序不可能接收所有的字节之后再进行处理,而是接收一点处理一点。比方你下载魔兽世界,不可能全部下载到内存里再保存到硬盘上,而是下载一点就保存一点。这时,流这种方式就非常适合。
在 Java 中,每个流都是一个对象。流分为两种:输入流(InputStream)和输出流(OutputStream)。对于输入流,你只要从流当中不停地把字节取出来就是了;而对于输出流,你只要把准备好的字节串传给它就行。
______________Java 程序____________
| |
外部系统 --|--(输入流)--> 处理逻辑 --(输出流)---|--> 外部系统
|_________________________________|
流对象是怎么获得的呢?不同的外部系统,获取流的方式也不同。例如,文件读写就要创建 FileInputStream/FileOutputStream 对象,而网络通信是通过 Socket 对象来获取输入输出流的。一般来说,如果一个类有 getInputStream() 或 getOutputStream() 这样的方法,就表明它是通过流对象来进行输入输出的。
InputStream 是输入流,下面是一个通过 InputStream 读取文件的例子:
import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.io.FileNotFoundException; import java.util.Arrays; /** * 通过流读取文件 */ public class ReadFileDemo { // 程序入口 public static void main(String[] args) { String path = "c:/boot.ini"; File file = new File(path); // 创建输入流 InputStream is; try { is = new FileInputStream(file); } catch (FileNotFoundException e) { System.err.println("文件 " + path + " 不存在。"); return; } // 开始读取 byte[] content = new byte[0]; // 保存读取出来的文件内容 byte[] buffer = new byte[10240]; // 定义缓存 try { int eachTime = is.read(buffer); // 第一次读取。如果返回值为 -1 就表示没有内容可读了。 while (eachTime != -1) { // 读取出来的内容放在 buffer 中,现在将其合并到 content。 content = concatByteArrays(content, buffer, eachTime); eachTime = is.read(buffer); // 继续读取 } } catch (IOException e) { System.err.println("读取文件内容失败。"); e.printStackTrace(); } finally { try { is.close(); } catch (IOException e) { // 这里的异常可以忽略不处理 } } // 输出文件内容 String contentStr = new String(content); System.out.println(contentStr); } /** * 合并两个字节串 * * @param bytes1 字节串1 * @param bytes2 字节串2 * @param sizeOfBytes2 需要从 bytes2 中取出的长度 * * @return bytes1 和 bytes2 中的前 sizeOfBytes2 个字节合并后的结果 */ private static byte[] concatByteArrays(byte[] bytes1, byte[] bytes2, int sizeOfBytes2) { byte[] result = Arrays.copyOf(bytes1, (bytes1.length + sizeOfBytes2)); System.arraycopy(bytes2, 0, result, bytes1.length, sizeOfBytes2); return result; } }
虽然写得很啰嗦,但这确实是 InputStream 的基本用法。注意,这只是一个例子,说明如何从输入流中读取字节串。实际上,Java 提供更简单的方式来读取文本文件。以后将会介绍。
相比从流中读取,使用 OutputStream 输出则是非常简单的事情。下面是一个例子:
import java.io.OutputStream; import java.io.FileOutputStream; import java.io.File; import java.io.IOException; import java.util.Date; /** * 将当前日期保存到文件 */ public class SaveFileDemo { public static void main(String[] args) throws IOException { String path = "c:/now.txt"; File file = new File(path); if (!file.exists() && !file.createNewFile()) { System.err.println("无法创建文件。"); return; } OutputStream os = new FileOutputStream(file); // 创建输出流(前提是文件存在) os.write(new Date().toString().getBytes()); // 将当前时间写入文件 os.close(); // 必须关闭流,内容才会写入文件。 System.out.println("文件写入完成。"); } }
Java 还提供其它的流操作方式,但它们都是对 InputStream 和 OutputStream 进行扩展或包装。所以这两个类是基础,必须要理解它们的使用。
相关文章推荐
- 【JAVA开发之IO流1-1】IO流简介及输入流和输出流
- Java Stream简介, 流的基本概念
- Java学习提要——输入流与输出流基本操作
- Java I/O全文摘要(二)基本I/O,输出流
- java IO操作与字节流(三)文件输入流与输出流
- Java的基本I/O(输入/输出)系统copy from (http://blog.sina.com.cn/s/blog_5ec67df20100d6ao.html)
- 心得---输出输入流简介、标准输入输出、过滤器
- android 向内存中 读写 文件数据 》》》java基础---- 文件输入流,文件输出流
- [转]java 输出流转输入流
- Java简介及基本设置
- [疯狂Java]I/O:处理流、PrintStream简介、I/O体系、字符串作为流节点
- java把输入流转换成输出流
- Java 8系列之Stream的基本语法详解
- Java基本数据类型的输入输出
- Java 8系列之Stream的基本语法详解
- java的输出流与输入流的讲解
- JHTP自测题_第二章_Java应用、输入、输出及运算符简介
- Java 输出流转输入流的方法(OutputStream转InputStream,Writer转Reader)
- [Java 8 Lambda] java.util.stream 简介
- java中输入流和输出流