一、I/O操作(流的概念)
一、流(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操作(流的概念)的更多相关文章
- 09-JS的事件流的概念(重点)
在学习jQuery的事件之前,大家必须要对JS的事件有所了解.看下文 事件的概念 HTML中与javascript交互是通过事件驱动来实现的,例如鼠标点击事件.页面的滚动事件onscroll等等,可以 ...
- 前端 ----js的事件流的概念(重要)
09-JS的事件流的概念(重点) 在学习jQuery的事件之前,大家必须要对JS的事件有所了解.看下文 事件的概念 HTML中与javascript交互是通过事件驱动来实现的,例如鼠标点击事件.页 ...
- JS的事件流的概念(重点)
09-JS的事件流的概念(重点) 在学习jQuery的事件之前,大家必须要对JS的事件有所了解.看下文 事件的概念 HTML中与javascript交互是通过事件驱动来实现的,例如鼠标点击事件 ...
- python 全栈开发,Day55(jQuery的位置信息,JS的事件流的概念(重点),事件对象,jQuery的事件绑定和解绑,事件委托(事件代理))
一.jQuery的位置信息 jQuery的位置信息跟JS的client系列.offset系列.scroll系列封装好的一些简便api. 一.宽度和高度 获取宽度 .width() 描述:为匹配的元素集 ...
- OTL翻译(2) -- OTL流的概念
OTL流的概念 任何的SQL语句.SQL语句块或存储过程,都是通过输入与输出变量进行处理参数与结果的. 如: 例1:一个SELECT语句把标量的输入变量作为WHERE子句部分的条件:同时SELECT部 ...
- JS的事件流的概念
事件的概念: HTML中与javascript交互是通过事件驱动来实现的,例如鼠标点击事件.页面的滚动事件onscroll等等,可以向文档或者文档中的元素添加事件侦听器来预订事件.想要知道这些事件是在 ...
- 09-----JS事件流的概念(重点)
在学习jQuery的事件之前,大家必须要对JS的事件有所了解.看下文 时间的概念 HTML中与javascript交互是通过事件驱动来实现的,例如鼠标点击事件.页面的滚动事件onscroll等等,可以 ...
- jQuery 事件流的概念
jQuery 事件流的概念 什么是事件流 DOM事件流 1. 事件捕获阶段; 2.处于目标阶段; 3.事件冒泡阶段; <!DOCTYPE html> <html lang=&quo ...
- 08 JS的事件流的概念(重点)
在学习jQuery的事件之前,大家必须要对JS的事件有所了解.看下文 事件的概念 HTML中与javascript交互是通过事件驱动来实现的,例如鼠标点击事件.页面的滚动事件onscroll等等,可以 ...
- Java修炼——IO流的概念以及其分类
IO流的基本概念: 流的原理: 1) 在 Java 程序中,对于数据的输入/输出操作以"流" (stream) 方式进行: 2) J2SDK 提供了各种各样的"流&quo ...
随机推荐
- 用flvplayer.swf在网页中播放视频(网页中flash视频播放的实现)
原:http://blog.csdn.net/ricciozhang/article/details/46868201 由于公司项目的需求,需要在展示一些信息的时候能够播放视频,拿到这个要求,我就从最 ...
- 【译】第17节---数据注解-Column
原文:http://www.entityframeworktutorial.net/code-first/column-dataannotations-attribute-in-code-first. ...
- Oracle Initialzation error instantclient_11_2 32位客户端问题
本地安装完oracle 用PLSql 连接是一堆的问题,折腾一上午终于解决了 下载一个 instantclient_11_2 32位的oracle客户端.放在oracle安装目录product下,在把 ...
- 【Python】【异步IO】
# [[异步IO]] # [协程] '''协程,又称微线程,纤程.英文名Coroutine. 协程的概念很早就提出来了,但直到最近几年才在某些语言(如Lua)中得到广泛应用. 子程序,或者称为函数,在 ...
- 次短路——Dijkstra
传送门 ——在LYC大佬的帮助下过了这道题 思路: LYC大佬的博客里已经讲得很清晰了,我只是提一下要点. 求次短路,主要考虑两个方面: ①在不重复走一条路的前提下,把最短路的其中一段替换为另一段. ...
- spring mvc 形参类型
spring mvc 形参类型 1 没有占位符号的,形参的名字为参数的名称 请求路径为:organtrans/t1/t5?a=1(a为形参的的名称必须一致) @RequestMapping(" ...
- 史上最全Java面试题(带全部答案)
今天要谈的主题是关于求职,求职是在每个技术人员的生涯中都要经历多次.对于我们大部分人而言,在进入自己心仪的公司之前少不了准备工作,有一份全面细致面试题将帮助我们减少许多麻烦.在跳槽季来临之前,特地做这 ...
- 第 3 章 镜像 - 021 - Docker 镜像小结
镜像小结 镜像的常用操作子命令: images 显示镜像列表 history 显示镜像构建历史 commit 从容器创建新镜像 build 从 Dockerfile 构建镜像 ...
- 拒绝采样 Rejection Sampling
2018-12-09 16:40:30 一.使用Rand7()来生成Rand10() 问题描述: 问题求解: 这个问题字节跳动算法岗面试有问到类似的,有rand6,求rand8,我想了好久,最后给了一 ...
- python中的面向对象学习以及类的多态
接下来类的第三个重要的特性:多态(一种接口,多种实现) 多态性(polymorphisn)是允许你将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特 ...