Java IO之字节流
来源:互联网 发布:网络球机云台设置 编辑:程序博客网 时间:2024/05/17 08:42
这是我当初在学习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(File file,boolean append)
第二个参数就是是否采用追加的方式写入到文本文件中
把上面的代码修改下就可以了
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之字节流
- Java IO之字节流
- Java IO之字节流
- Java IO 之字节流
- Java IO之字节流
- Java IO之字节流
- java IO 之 字节流
- Java基础----IO流之字节流
- Java基础--IO流之字节流
- java基础之字节流(IO流)
- java基础IO流之字节流
- Java之IO流---字节流
- Java之IO流---字节流
- Java之IO流---字节流
- java之IO流-字节流
- Java基础18-IO之字节流
- 跟着老毕学Java之IO字节流
- [学习笔记]Java IO之字节流
- Java中的泛型使用
- 118. Pascal's Triangle
- Lintcode52 Next Permutation solution 题解
- Android 开发第一天
- 4. Lucene各种查询操作(Lucene6.0.0)
- Java IO之字节流
- (58)组件之渲染组件
- HDU 2.1.7
- Lintcode53 Reverse Words in a String solution 题解
- springboot-02thymeleaf注意
- StringBuffer,StringBuilder和String的区别
- Lintcode54 String to Integer II solution 题解
- 如何在MacOS上玩儿汇编?
- 设计模式之单例模式的介绍及C++实现