一、流(Stream)

所谓流(Stream),就是一系列的数据。

当不同的介质之间有数据交互的时候,java就会使用流来实现。

数据源可以使文件,还可以是数据库,网络,甚至是其他的程序

不如读取文件的数据到程序中,站在程序的角度来看,就叫做输入流

字节输入流:InputStream        字符输入流:Reader    缓存字符输入流:BufferedReader  数据输入流  :DataInputStream

字节输出流:OutputStream        字符输出流:Writer    缓存字符输出流:PrintWriter    数据输出流:DataOutputStream 

1、文件输入流

可以用来把数据从硬盘的文件,读取到JVM(内存)

package stream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException; public class TestStream{
public static void main(String[] args){
try{
File f=new File("d:/lol.txt");
//创建基于文件的输入流
FileInputStream fis=new FileInputStream(f);
//通过这个输入流,就可以把数据从硬盘,读取到java的虚拟机中,也就是读取到内存中
}catch(Exception e){
e.printStackTrace();
}
}
}

2、字节流

InputStream:字节输入流

用以字节的形式读取和写入数据

InputStream是字节输入流,同时也是抽象类,只提供方法声明,不提供方法的具体实现。

FileInputStream是InputStream的子类,可以进行直接使用

package stream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException; public class TestStream{
public static void main(String[] args){
try{
File f=new File("d:/lol.txt");
//创建基于文件的输入流
FileInputStream fis=new FileInputStream(f);
//通过这个输入流,就可以把数据从硬盘,读取到java的虚拟机中,也就是读取到内存中
//创建字节数组,其长度就是文件的长度
byte[] all=new byte[(int)f.length()];
//以字节流的形式读取文件所有内容
fis.read(all);
for(byte b:all){
System.out.println(b);
}
//每次使用完流,都应该进行关闭
fis.close()
}catch(Exception e){
e.printStackTrace();
}
}
}

OutputStream:字节输出流,同事也是抽象类,只提供方法声明,不提供方法的具体实现。

FileOutputStream是OutputStream子类,可以进行直接使用

package stream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException; public class TestStream{
public static void main(String[] args){
try{
File f=new File("d:/lol.txt");
byte data[]={88,89};
//创建基于文件的输出流
FileOutputStream fos=new FileOutputStream(f); //把数据写入到输出流上
fos.write(data);
//每次使用完流,都应该进行关闭
fos.close()
}catch(Exception e){
e.printStackTrace();
}
}
}

注:所有的流,不论是输入流还是输出流,使用完毕之后,都应该关闭,如果不关闭,会产生对资源占用的浪费,当量比较大时,会影响业务的正常开展。

3.流的关闭方式

a.在finally中关闭:3.1.首先把流的引用声明在try的外面,如果声明在try里面,其作用与无法抵达finally

3.2.在finally关闭之前,要先判断该引用是否为空

3.3.关闭的时候,要再一次的进行try。。catch处理

package stream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException; public class TestStream{
public static void main(String[] args){
File f=new File("d/source/LOL.exe");
FileInputStream fis=null;
try{
fis=new FileInputStream(f);
byte[] all=new byte[(int)f.length()];
fis.read(all);
for(byte b:all){
System.out.println(b);
}
}catch(IOException e){
e.printStackTrace();
}finally{
//在finally里关闭流
if(null!=fis)
try{
fis.close();
}catch(IOException e){
e.printStackTrace();
}
}
}
}

b.使用try()方式

把流定义在try()里,try,catch或者finally结束的时候,会自动关闭

这种编写代码的方式叫做try-with-resources,这是JDK7开始支持的技术

所有的流,都实现了一个借口叫做AutoCloseable,任何类实现了这个接口,都可以在try()中进行实例化,并且在try,catch,finally结束的时候自动关闭,回收相关资源。

public class TestStream{
public static void main(String[] args){
File f=new File("d/source/LOL.exe");
//把流定义在try()里,try,catch或者finally结束的时候,会自动关闭
try(FileInputStream fis=new FileInputStream(f)){
byte[] all=new byte[(int)f.length()];
fis.read(all);
for(byte b:all){
System.out.println(b);
}catch(IOException e){
e.printStackTrace();
}
}
}
}

一、I/O操作(流的概念)的更多相关文章

  1. 09-JS的事件流的概念(重点)

    在学习jQuery的事件之前,大家必须要对JS的事件有所了解.看下文 事件的概念 HTML中与javascript交互是通过事件驱动来实现的,例如鼠标点击事件.页面的滚动事件onscroll等等,可以 ...

  2. 前端 ----js的事件流的概念(重要)

    09-JS的事件流的概念(重点)   在学习jQuery的事件之前,大家必须要对JS的事件有所了解.看下文 事件的概念 HTML中与javascript交互是通过事件驱动来实现的,例如鼠标点击事件.页 ...

  3. JS的事件流的概念(重点)

      09-JS的事件流的概念(重点)   在学习jQuery的事件之前,大家必须要对JS的事件有所了解.看下文 事件的概念 HTML中与javascript交互是通过事件驱动来实现的,例如鼠标点击事件 ...

  4. python 全栈开发,Day55(jQuery的位置信息,JS的事件流的概念(重点),事件对象,jQuery的事件绑定和解绑,事件委托(事件代理))

    一.jQuery的位置信息 jQuery的位置信息跟JS的client系列.offset系列.scroll系列封装好的一些简便api. 一.宽度和高度 获取宽度 .width() 描述:为匹配的元素集 ...

  5. OTL翻译(2) -- OTL流的概念

    OTL流的概念 任何的SQL语句.SQL语句块或存储过程,都是通过输入与输出变量进行处理参数与结果的. 如: 例1:一个SELECT语句把标量的输入变量作为WHERE子句部分的条件:同时SELECT部 ...

  6. JS的事件流的概念

    事件的概念: HTML中与javascript交互是通过事件驱动来实现的,例如鼠标点击事件.页面的滚动事件onscroll等等,可以向文档或者文档中的元素添加事件侦听器来预订事件.想要知道这些事件是在 ...

  7. 09-----JS事件流的概念(重点)

    在学习jQuery的事件之前,大家必须要对JS的事件有所了解.看下文 时间的概念 HTML中与javascript交互是通过事件驱动来实现的,例如鼠标点击事件.页面的滚动事件onscroll等等,可以 ...

  8. jQuery 事件流的概念

    jQuery  事件流的概念 什么是事件流 DOM事件流 1. 事件捕获阶段; 2.处于目标阶段; 3.事件冒泡阶段; <!DOCTYPE html> <html lang=&quo ...

  9. 08 JS的事件流的概念(重点)

    在学习jQuery的事件之前,大家必须要对JS的事件有所了解.看下文 事件的概念 HTML中与javascript交互是通过事件驱动来实现的,例如鼠标点击事件.页面的滚动事件onscroll等等,可以 ...

  10. Java修炼——IO流的概念以及其分类

    IO流的基本概念: 流的原理: 1) 在 Java 程序中,对于数据的输入/输出操作以"流" (stream) 方式进行: 2) J2SDK 提供了各种各样的"流&quo ...

随机推荐

  1. 使用TestServer测试ASP.NET Core API

    今儿给大家分享下,在ASP.NET Core下使用TestServer进行集成测试,这意味着你可以在没有IIS服务器或任何外部事物的情况下测试完整的Web应用程序.下面给出示例: public Sta ...

  2. 最简单的服务器和客户机(python3的编码与解码问题)

    在学习python的过程中,我越来越感觉到python2和python3之间有很多不同点,最近发现的一点就是编码问题. 在代码清单14-1和14-2中,因为作者是用python2来写得,然后我是用py ...

  3. 1月4日笔记 (vi编辑器)更新...

      vi编辑器,全称是visual interface,可以执行输出.删除.查找.替换等众多的文本操作. vi并不是一个排版程序,不可以对字体.格式.段落等其他的属性进行编排. vi是全屏文本编辑程序 ...

  4. P3110 [USACO14DEC]驮运Piggy Back

    传送门 做过次短路后,再来做这题感觉轻松不少. 这题看着就像最短路模板题. 思路: 虽说题目看起来比较水,但是码起来还是有点难度的.(对我这个蒟蒻来说) 这道题,跟"路障"一题差不 ...

  5. GZip对字符串压缩和解压

    /// <summary> /// 压缩 /// </summary> /// <param name="value">需要压缩字符串</ ...

  6. img 下方的4px像素问题

    问题:在一个div块里面放了一个图片,图片下面有内容,可以不管怎么调试,在火狐浏览器,IE6下.图片img底部多出了4个像素 解决:img样式中   vertical-align: top/middl ...

  7. JAVA基础知识总结:十九

    一.多线程使用过程中的临界资源问题 1.临界资源:被多个线程同时访问的资源 临界资源产生的原因:有多个线程同时访问一个资源的时候,如果一个线程在取值的过程中,时间片又被其他的线程抢走了,临界资源问题就 ...

  8. Java操作zookeeper

    Java操作zookeeper总共有三种方式: 1.原生的Java API 2.zkclient 3.curator 第一种实现代码: pom.xml <dependency> <g ...

  9. 注册表的作用、bat文件中REG ADD命令添加注册表项以及bat

    注册表的用途与设置 注册表是windows的核心,里面储存着大量的系统信息,说白了就是一个庞大的数据库.如果你不懂什么是数据库,那没关系,不影响你了解注册表,不过最好对数据库有所了解.注册表里面所有的 ...

  10. thinkphp中出现unserialize(): Error at offset 533 of 1857 bytes如何解决

    thinkphp中出现unserialize(): Error at offset 533 of 1857 bytes如何解决 一.总结 一句话总结:清缓存就好了,所以框架有问题可以考虑清缓存 清缓存 ...