到目前为止,我所学习的知识和写的小程序都只是帮助我实现我“自己”所要做的东西,那么怎样得到外部的信息,实现程序与外部文件之间的数据交互了?最近学的Stream“流”可以解决这个问题。
"流"——Stream是IO类库中的一个抽象概念,它代表任何有能力产出数据的数据源对象或是有能力接收数据的数据端对象。"流"屏蔽了实际的IO设备中处理设备中处理数据的细节。
在实际学习和使用"流"的过程中,尽量将其想象成一根管子,管子的一段接着程序(内存),而另一端接着所要处理的文件资源。
流的分类:
J2SDK中的位于java.io包的流类型都分别继承了以下4个抽象类:InputSream,OutputStream,Writer,Reader
按流的方向的不同:分为输入流和输出流。注意,输入和输出都是站在程序的角度上说的,而不是站在文件的角度。InputSream和Reader都属于输入流,而OutputStream和Writer都属于输出流。任何自InputSream或Reader派生而来的类都含有名为read()的基本方法。同样,任何自OutputStream和Writer派生而来的类都含有名为write()的基本方法。
按处理数据的单位的不同:分为字符流和字节流。顾名思义,字符流和字节流处理数据的单位分别是字符(在java中是2个字节)和字节(8位0/1)。InputSream和OutputStream是字节流。Writer和Reader是字符流。
按功能的不同:分为节点流和处理流。节点流是最基本的流。与之对应,处理流是使用了装饰器(filter)模式的流,在我们编写程序的时候它给我们提供了相当大的灵活性(但,不可否认,同时也增加了代码的复杂性)。如:DataInputStream,BufferedInputStream,FileInputStream等等,相应的,还有DataOutputStream,BufferedOutputStream,FileOutputStream等等。
处理流是一类特殊的流,它的构造器必须传入一个节点流或处理流。如下面的代码:
package file0313;
import java.io.*;
public class TestBufferedReader {
public static String read(String fileName) throws IOException{
//一行一行的读取数据
BufferedReader in = new BufferedReader(new FileReader(fileName));
String s;
StringBuilder sb = new StringBuilder();
while((s = in.readLine())!=null){
sb.append(s+"\n");
}
in.close();
return sb.toString();
}
public static void main(String[] args) throws IOException{
System.out.println(read("src\\file0313\\TestBufferedReader.java"));
}
}
/**
*编译运行查看结果
*注意:文件读取完毕记得关闭:in.close();虽然,java垃圾处理器会在一段时间后将之回收
*用readLine()读取文件内容时必须添加必要的换行符,因为该方法已经将之删除
*
*/
当然,还有一类特殊的流——管道流:PipInputStream,PipOutputStream,PipReader,PipWriter,它们用于任务之间的信息交互,在多线程的应用中有巨大的作用。因为我还没有学习多线程,所以,我现在也不是太清楚。
分享到:
相关推荐
JAVA_IO操作总结——节点流和处理流.pdf JAVA_IO操作总结——节点流和处理流.pdf
有2个文件有main(),其中一个是多线程的一条线一条线的读取,另一个是一个点一个点的读取,比较慢 博文链接:https://263796001-qq-com.iteye.com/blog/991351
IO-Link——智慧的通信技术.pdf
java基础——IO流及File-RandomAccessFile对象.docx
内容:IO流及其分类、分类比较、转换流、缓存流、IO流异常处理、Stream流、Properties教程等。 适合人群:有编程基础及Java基础伙伴 适用场景:Java中的流是随处可见的,涉及文件的操作必须使用IO流,Stream流可以对...
javaIO流
python中的IO流(csdn)————程序
说到Stream便容易想到I/O Stream,而实际上,谁规定“流”就一定是“IO流”呢?在Java 8中,得益于Lambda所带来的函数式编程,引入了一个全新的Stream概念,用于解决已有集合类库既有的弊端。 1.1 引言 传统集合的...
java IO流学习笔记——(1) IO流总述 • 输入流:数据源到程序(InputStream、Reader读进来) • 输出流:程序到目的地(OutputStream、Writer写出去) 流分类 : • 节点流:可以直接从数据源或目的地读写数据 • 处理...
JAVA-SE入门学习——第九讲IO流
python IO流(csdn)————程序
简单易懂讲IO(csdn)————程序
stream-ruby, ruby 客户端生成活动使用 GetStream.io 提供&流 流 ruby 是一款用于构建可以伸缩新闻发布和活动流的web服务的官方 ruby 客户端,它是流。注意,还有一个更高级的 Ruby on Rails - 流集成插件库,它将...
java IO流学习笔记——(2)文件字符流&字节数组流 文件字符流FileReader&FileWriter FileReader :通过字符的方式读取文件,仅适合字符文件 FileWriter :通过字节的方式写出或追加数据到文件中,仅适合字符文件 部分...
Java图书管理系统(IO流版)(csdn)————程序
IO流 javaio java 流
目录java IO流学习笔记——(3)字节缓冲流&字符缓冲流&转换流&数据流字节缓冲流 —BufferedInputStream&BufferedOutputStream字符缓冲流—BufferedReader&BufferedWriter转换流—InputStreamReader&...
linux 标准IO——学生信息管理 作业 ls——stu。c linux 标准IO——学生信息管理 作业 ls——stu。c linux 标准IO——学生信息管理 作业 ls——stu。c
java基础之IO流,基础简介知识,帮助你了解java的io技术
IO流学习(字节流 字符流 文本流)!