字节流 缓冲流 数据流
2015-08-03 20:01
190 查看
1、字节流
先了解流的概念
流分为输入流和输出流,一个对象的输入流是指从外界到这个对象的流,输出流则是从这个对象到它的外界的流。
例如:对于一个JAVA程序来说,它是运行在JVM(JAVA虚拟机)中的的,如果它想要从硬盘中读取文件,就要用到它的输入流,JVM通过向操作系统提出请求来获得输入流,以将磁盘中的文件内容传入到程序中。
而写入磁盘或者从磁盘中读取是通过读写字节或者读int型数据实现的。
这种以字节形式读写的流对象成为字节流。
2、缓冲流
操作系统读取在Buffer中读取一定的字节数据之后再传递给JVM,这就是缓冲。
3、数据流
这种流会在画图保存这篇博客中讲到,这里就不说了。
最后奉上字节流和缓冲流的代码:
先了解流的概念
流分为输入流和输出流,一个对象的输入流是指从外界到这个对象的流,输出流则是从这个对象到它的外界的流。
例如:对于一个JAVA程序来说,它是运行在JVM(JAVA虚拟机)中的的,如果它想要从硬盘中读取文件,就要用到它的输入流,JVM通过向操作系统提出请求来获得输入流,以将磁盘中的文件内容传入到程序中。
而写入磁盘或者从磁盘中读取是通过读写字节或者读int型数据实现的。
这种以字节形式读写的流对象成为字节流。
2、缓冲流
操作系统读取在Buffer中读取一定的字节数据之后再传递给JVM,这就是缓冲。
3、数据流
这种流会在画图保存这篇博客中讲到,这里就不说了。
最后奉上字节流和缓冲流的代码:
package ch0801; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; public class IODemo{ public static void main(String[] args){ //FileIO("src\\ch0801\\write.txt","src\\ch0719\\writeTo.txt"); 这样的路径貌似有问题 FileIO("F:\\test.txt","D:\\writeTo.txt"); //可以运行,通过多次运行可以发现每次写入都会覆盖之前的内容 BufferIO("D:\\writeTo.txt","E:\\writeToo.txt"); //可以运行 } /* * 字节流的使用 * path 读取的路径 * newPath 写入的路径 */ public static void FileIO(String path,String newPath){ //定义为Static不用再对象中调用,使用起来比较方便 try{ //step1.创建输入输出流 FileInputStream fis = new FileInputStream(path); FileOutputStream fos = new FileOutputStream(newPath); //step2.创建承载字节内容的字节数组 byte[] array = new byte[fis.available()];//available()用来获取读取内容的大小 //step3.从目标路径读取文件信息 fis.read(array); //还有另外几种读取写入方式 //方式一. // int i; // while((i=fis.read())!=-1){ //如果没有读到最后 // fos.write(i); // } //方式二. // while(fis.available()>0){ //如果还有内容可读取 // i = fis.read(); // fos.write(i); // } //step4.将读取到的文件信息写入到指定路径 fos.write(array); //step5.关闭输入输出流 fis.close(); fos.close(); }catch(Exception e){ e.printStackTrace();//输出堆栈信息 } } /* * 缓冲流 * 缓冲流是什么?首先要清楚我们运行JAVA程序是在JVM中运行的 * 一个在硬盘中读取文件的过程是怎样的? * 1.JVM向操作系统提出请求 * 2.操作系统读取硬盘中的文件 * 3.操作系统将文件递交给JVM供JAVA程序使用 * 如果操作系统读取一定量的文件后再交给JAVA程序,就使用了缓冲,一般来说,缓冲流的读取速度会比字节流要快 */ public static void BufferIO(String path,String newPath){ try { //Step1.创建缓冲输入、输出流对象 FileInputStream fis = new FileInputStream(path); BufferedInputStream bis = new BufferedInputStream(fis); FileOutputStream fos = new FileOutputStream(newPath); BufferedOutputStream bos = new BufferedOutputStream(fos); //Step2.创建字节数组 byte[] array = new byte[bis.available()]; //Step3.读取并写入 bis.read(array); bos.write(array); //Step4.关闭输入输出流 bis.close(); bos.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } /* * 数据流的使用 * 具体可以使用于画图板、五子棋的保存 */ }
相关文章推荐
- 学习 Apache 的一些心得体会[转]
- CodeIgniter使用中遇到的问题
- 多线程、IO模型、epoll杂谈
- 剑指Offer面试题22(Java版):栈的压入、弹出序列
- 如何使用Createjs来编写HTML5游戏(一)EaselJS简介
- 变化多端 – 多种纯CSS的HTML表格设计
- Qt创建窗体的过程
- go锁屏 v5.07 安卓版
- ZOJ 3886 Nico Number(素数筛选 + 线段树)
- 动态规划之UNIMODAL PALINDROMIC DECOMPOSITIONS
- Yii2的安装及简单配置
- 22.LTView
- 最大子序列和的问题
- 剖析Qt的事件机制原理
- 屏幕触摸事件,摇一摇晃动事件
- 斐波那契数列四吧
- LA3942 Remember the Word(字典树+记忆化搜索)
- C++中this指针的用法.
- Activiti5工作流框架学习之Struts2+Hibernate+Spring整合配置
- Java 在线工具