1. 如何理解输入输出流?
这是我当初在学习Java IO这一块很难理解的一块,输入输出流我们可必须以一个为参照物:我们以内存为参照物,凡是写入内存的我们叫输入流,从内存中写出的我们叫输出流。看下面的示例图
有了这样的一个概念对于我们再学习Java中的IO流我相信就会变得特别简单了。
2. 再看流的分类
流的分类,Java的流分类比较丰富,刚接触的人看了后会感觉很晕。流分类的方式很多:
1、按照输入的方向分,输入流和输出流,输入输出的参照对象是Java程序。(InputStream OutPutStream)
2、按照处理数据的单位不同分,字节流和字符流,字节流读取的最小单位是一个字节(1byte=8bit),而字符流一次可以读取一个字符(1char = 2byte = 16bit)。(InputStream Reader)
3、按照功能的不同分,分节点流和处理流,节点流是直接从一个源读写数据的流(这个流没有经过包装和修饰),处理流是在对节点流封装的基础上的 一种流,FileInputStream是一个接点流,可以直接从文件读取数据,但是BufferedInputStream可以包装 FileInputStream,使得其有缓冲功能。(FileInputStream BufferedInputStream)
其实除了以上三种分类外,还有一些常常听到的一些分类比如:对象流、缓冲流、压缩流、文件流等等。其实都是节点流和处理流的子分类。当然你也可以创建新的流类型,只要你需要。
3. 字节流:
字节流主要操作byte类型数据,以byte数组为准,主要操作类有InputStream(字节输入流)、OutputSteam(字节输出流)由于IputStream和OutputStream都是抽象类,所要要用这两个类的话,则首先要通过子类实例化对象。下面就是这两个类的一些子类结构图
1) 字节输出流:OutputStream
OutputStream是一个抽象类,要想使用它,必须通过子类来实例化它。
OutputStream类的常用方法
方法名称
|
描述
|
public void close() throws IOException
|
关闭输出流
|
public void flush() throws IOException
|
刷新缓冲区
|
public void write(byte[] b) throws IOException
|
将一个byte数组写入数据流
|
public void write(byte[] b,int off,int len) throws IOException
|
将一个指定范围的byte数组写入数据流
|
public abstract void write(int b) throws IOException
|
将一个字节数据写入数据流
|
实例1:Helloworld从HelloWorld开始
功能:(向一个名为”hello.txt”的文本文件中写一个“HelloWorld”)
我们可以看到当前工程目录下已经有一个helloworld.txt且里面已经有数据,如果我们把str的值改变的话,文本文件里的数据也会改变,所以我们想是不是可以不删除原来的数据,在追尾上追加上。
我们只要在构造FileOutputStream对象的时候选择另一种构造方法就可以了
FileOutputStream(Filefile,booleanappend)
第二个参数就是是否采用追加的方式写入到文本文件中
把上面的代码修改下就可以了
outputStream = new FileOutputStream(file,true);
再从例子1我们理解我们对输入输出流的理解,在这个例子里,我们声明的字符串肯定是在内存中的,现在我们要从内存中把数据写到文本中,所以我们用到输出流。这也正符合了我对输入输出流的理解,当然大家肯定还有其他的理解方式。
2) 字节输入流:InputStream
InputStream类的常用方法
方法名称
|
描述
|
public void avaliable() throws IOException
|
可以取得输入文件的大小
|
public void close() throws IOException
|
关闭输入流
|
public abstract int read() throws IOException
|
读取内容,以数字的方式读取
|
public int read (byte b) throws IOException
|
将内容读到byte数组,同时返回读入的个数
|
与OutputStream类一样,InputStream本身也是一个抽象类,要想使用它,也必须依靠其子类。
实例2:还是HelloWorld
在上一个例子的基础上我们从文本中读取数据并且把它显示在控制台上
如果以这种方式打印,我们可以看到虽然控制台里是打印出了文本文件中的内容,但是后面跟了很多空格,这是我们不需要的,对于这种情况我们有两种解决方式
方式一:声明字节数组的时候指定字节数组的长度为文本内容的长度
byte[] b=new byte[(int)file.length()];
方式二:在将字节数组转换成字符串的调用String(byte b,int off,int len)这个构造函数
System.out.println(new String(b,0,(int)file.length()));
分享到:
相关推荐
Java IO字符流和字节流,讲述了字符传输流和字节传输流的不同和作用
2、常用21个IO流:FileWriter、FileReader、...3、JAVA IO流经典代码示例,示例从易到难。代码功能涉及字节、字符、字符串、文本文件、图片、音频、视频。演示错误用法和经典用法。 4、代码的结构可查看README文件。
NULL 博文链接:https://xiongjiajia.iteye.com/blog/1683399
该代码源码资源是一个用于讲解Java IO流的示例代码库。它包含了常见的IO类和方法的使用...通过研究这些代码示例,读者将能够了解如何使用不同类型的IO类来进行文件读写、字符流、字节流、网络传输等各种常见的IO操作。
JavaIO实例,包括:字节流、字符流、缓冲流、转换流
javaIO操作各种文件,筛选文件,拷贝文件,上传下载,字符流和字节流都有,根据实际项目情况直接贴就可以了,根据文件类型选择不同的testclss就可以。全部使用效率最高的流
javaIO字节流读取文件方式总结共4页.pdf.zip
JavaIO字节输出流的总结共6页.pdf.zip
java IO流 例子 源程序 字节流,字符流。
字节流:按照字节读取数据(InputStream、OutputStream) 字符流:按照字符读取数据(Reader、Writer) 功能不同: 节点流:可以直接从数据源或目的地读写数据。 处理流:不直接连接到数据源或目的地,是处理流的流...
Java中IO流实例,包括:字节流、字符流、缓冲流、转换流的操作。
java IO流 1. 流的概念 2. 输入流和输出流 3. 字符流、字节流 4. 缓冲流 5. 转换流处理流
主要描述了常用字节流的用法,附上一些代码!
此文档属于本人当初学习java基础之IO流,所整理的文档。里面有字节流与字符流的比较,也有总结使用不同方式读取文档的demo。希望对你的学习有帮助,谢谢!
java io流总结,包括字符流,字节流,很详细。inputStream outputStream
Java 的 IO 流主要包括输入、输出两种 IO 流,每种输入、输出流有可分为字节流和字符流两大类: 字节流以字节为单位来处理输入、输出操作 字符流以字符为单位来处理输入、输出操作
- 字节流对象 - InputStream - OutputStream - 字符流对象 - Reader - Writer - 字节流与字符流的转换 - 新潮的 NIO - 缓冲区(Buffer) - 通道(Channel) - 示例:文件拷贝案例 - BIO 和 NIO 拷贝文件...
主要介绍了Java中IO流 字节流实例详解的相关资料,需要的朋友可以参考下
InputStream和OutputStream 1.DataInputStream,DataOutputStream 从Stream里读取基本类型的数据 BufferedReader,BufferedWriter 从Reader/Writer里读取基本类型的数据 2.BufferedInputStream,...