(16)IO流之输入字节流FileInputStream和输出字节流FielOutputStream
IO流技术解决的问题:设备与设备之间的传输问题,内存——>硬盘,硬盘——>内存,等等
IO流技术
如果按照数据的流向划分可以划分为:输入流和输出流
输入输出的标准是以程序为参考物的,如果流出则选用输出流,如果数据流入则使用输入流。
如果按照处理的单位来划分:字节流和字符流
字节流:读取文件中的二进制数据,而且读取的二进制数据不会经过任何的处理
字符流:***也是读取文件中的二进制数据,不过会吧这些二进制的数据转换成我们能识别的字符。
字符流 = 字节流 + 解码
上面的分析告诉们先看字节流再学字符流
IO流中的类的名字,都很好叫,一般都是把父类作为子类名字的后缀。
输入字节流:最大的特点是一看类的名字就知道这个类是可以干什么的
InputStream 所有输入字节流的基类
|————FileInputStream
使用FileInputStream如何读取文件:
1、找到目标文件 。File类来解决
2、建立数据的输入通道。
3、读取文件的数据,使用流对象的read方法.当读到文件结尾时返回-1,表示结束
4、关闭资源。实质上就是释放资源的作用.一般调用close方法
这一块介绍了4中读取字符流的方法,最后,留下一种是最好的。贴在下面:
//使用缓冲数组配合循环一起来读取 这是最最推荐的方式 以后都是这种方式
public static void readTest4() throws IOException
{
long start = System.currentTimeMillis();
//找到目标文件
File file = new File("D:\\pic.jpg");
//建立数据的输入通道
FileInputStream fileInputStream = new FileInputStream(file);
//建立缓冲数组配合循环 读取文件的数据
int length = 0; //保存每次读取到的字节个数
byte[] buf = new byte[1024*3]; //缓冲数组的长度一般是1024的倍数,因为正好是计算机处理单位,理论上来说缓冲数组越大,效率越高
while((length = fileInputStream.read(buf))!=-1)
{
System.out.println(new String(buf, 0, length));
}
long end = System.currentTimeMillis();
System.out.println("使用时间:"+(end - start));
}
注意:
1、资源文件一旦使用完毕要立马是释放,不然别的程序将无法对该资源进行操作、
2、用户混错的buf构建字符串的时候必须应当new String(buf, 0, length),因为length是每次read出的长度,又能最后一次独处的内容没有buf总的长度那么长,那么buf中残存的又上一次的数据。
字节流之输出 OutputStream 所有输出字节流的基类
OutputStream 所有输出字节流的基类 抽象类
|——FileOutputStream 向文件输出数据的输出的字节流
FileOutputStream 输出字节流的使用步骤
1、找到目标文件
2、建立文件与程序的输出通道
3、把数据转换成字节数组写出
4、关闭资源
FileOutputStream要注意的事情:
1、使用FileOutputStream的时候,如果目标文件不错在,就会自动创建目标文件。
2、使用FileOutputStream的时候,如果文件已经存在,那么会先清空目标文件中的数据,然后在写入数数据。
3、使用FileOutputStream的时候,如果文件已经存在,需要在原来的文件末尾追加元素的时候,应当使用构造函数new FileOutputStream(file, true);每创建一个FileOutputStream的时候,指正会指向文件的开始位置。每写一次指针都会做出相应的移动,拷贝文件的时候,会新建一个文件,因为指针是一直持续向后移动的。
4、使用FileOutputStream的write方法写数据的时候,虽然每次接受而的是一个int型的数据,但是整整写出的只是一个字节的数据,只是把低8位的二进制数据写出,其他24位的数据全部丢弃。
使用输出流,把字节数组中的数字写出:
public static void writeTest2() throws IOException
{
//找到目标文件
File file = new File("D:\\b.txt");
//建立文件与数据的输出通道
FileOutputStream fileOutputStream = new FileOutputStream(file, true);
//把数据写出
String data = "hello world"; //getbytes()转变为字节数组
fileOutputStream.write(data.getBytes());
//关闭资源
fileOutputStream.close();
}
拷贝一张图片:
public static void copyImage() throws IOException
{
//找到目标文件
File inFile = new File("D:\\1.jpg");
File destFile = new File("E:\\1.jpg");
//建立数据的输入输出通道
FileInputStream fileInputStream = new FileInputStream(inFile);
FileOutputStream fileOutputStream = new FileOutputStream(destFile); //追加数据.... //每新创建一个FileOutputStream的时候,默认情况下FileOutputStream 的指针是指向了文件的开始的位置。 每写出一次,指向都会出现相应移动。
//建立缓冲数据,边读边写
byte[] buf = new byte[1024];
int length = 0 ;
while((length = fileInputStream.read(buf))!=-1){ //不限丢人的输出来第一次我写的时候,read(buf)中的参数buf被我写丢了,好久才发现的错误
fileOutputStream.write(buf,0,length); //写出很多次数据,所以就必须要追加。
}
//关闭资源 原则: 先开后关,后开先关。
fileOutputStream.close();
fileInputStream.close();
}
(16)IO流之输入字节流FileInputStream和输出字节流FielOutputStream的更多相关文章
- Java Io 流(输入输出流)
IO流,也就是输入和输出流,可分为字节流和字符流. 1. 字节流 (1). InputStream 输入流,用于读取文件 输入流常用API: inputStream.read() 读取一个字节 in ...
- Java自学第10期——File类与IO流(输入输出流、处理流、转换流、缓冲流、Properties集合、打印流)
1.IO简介 IO(输入输出)通过java.io包下的类和接口来支持,包下包括输入.输出两种IO流,每种输入输出流又可分为字符流和字节流两大类. 2.File类 File类是io包下与平台无关的文件和 ...
- Java中IO流,输入输出流概述与总结
总结的很粗糙,以后时间富裕了好好修改一下. 1:Java语言定义了许多类专门负责各种方式的输入或者输出,这些类都被放在java.io包中.其中, 所有输入流类都是抽象类InputStream(字节输入 ...
- IO流回顾与总结第一篇之字节流与字符流的操作。。。。。
一.引言 趁着年后的这点时间,抓紧点时间回顾下javase中的IO流,以往都是用到那些常用的IO类,这次来个全点的,有不对的地方还请大神指正一下,做到坚持写博的习惯来...... 回归正题,IO流顾名 ...
- J03-Java IO流总结三 《 FileInputStream和FileOutputStream 》
1. FileInputStream FileInputStream是一个文件输入节点流,它是一个字节流,它的作用是将磁盘文件的内容读取到内存中. FileInputStream的父类是Inpu ...
- IO流 - 字节输入输出流,文件的复制
IO流 I:input - 输入(读取),eg:把硬盘的内容读取到内存 O: output - 输出(写入) eg:把内存中的东西写入硬盘保存 流:数字(字符/字节) 一般1个字符=2Byte,1By ...
- Java基础知识强化之IO流笔记22:FileInputStream / FileOutputStream 复制文本文件案例1
1. 使用字节流FileInputStream / FileOutputStream 复制文本文件案例: 分析: (1)数据源:从哪里来 a.txt -- 读取数据 -- FileInpu ...
- IO流07_输入输出流总体系
[javaIO体系中常用的流] [关于字符流和字节流的注意点] 通常,字节流比字符流功能更加强大,因为字节流可以处理所有的二进制文件. 但是字节流来处理字符,又需要将字节转换成字符,增加了编程复杂度. ...
- Java基础知识强化之IO流笔记27:FileInputStream读取数据一次一个字节数组byte[ ]
1. FileInputStream读取数据一次一个字节数组byte[ ] 使用FileInputStream一次读取一个字节数组: int read(byte[] b) 返回值:返回值其实是实际 ...
随机推荐
- Swing JComboBox的使用
1:JComboBox的使用:类层次结构图: java.lang.Object --java.awt.Component --java.awt.Container --javax.swing.JCom ...
- Java获取http和https协议返回的json数据
现在很多公司都是将数据返回一个json,而且很多第三方接口都是返回json数据,而且还需要使用到http协议,http协议是属于为加密的协议,而https协议需要SSL证书,https是将用户返回的信 ...
- 构建Docker平台【第二篇】安装 Docker
第一步:上传安装包和 docker 镜像 1.安装包: docker-engine-1.12.1-1.el7.centos.x86_64.rpm docker-engine-selinux-1.12. ...
- 2017年2月16日-----------乱码新手自学.net 之MVC模型
第二篇博文,最近学习的内容还是回到了正题:ASP.NET MVC5之上.虽然EF学了个一知半解,但是用这点知识,看MVC5的MODEL部分应该还是够了.尽管周末还要恶补一下EF才行. (一)MVC简述 ...
- 【openstack N版】——创建云主机
一.启动实例 1.1 已准备服务介绍 MySql:为各个服务提供数据存储. RabbitMQ:为各个服务之间通信提供交通枢纽. keystone:为各个服务之间通信提供认证和服务注册. Glance: ...
- WPF移动Window窗体(鼠标点击左键移动窗体自定义行为)
XAML代码部分:1.引用System.Windows.Interactivity 2.为指定的控件添加一个拖动的行为 3.很简单的了解行为的作用和用法 <Window xmlns=" ...
- Keepalived + HAProxy 搭建【第一篇】HAProxy 的安装与配置
第一步:准备 1. 操作系统 CentOS-7-x86_64-Everything-1511 2. 安装包 haproxy-1.7.2.tar.gz 第二步:安装 # tar zxvf haproxy ...
- 一个基于Behave框架的http接口测试实例
前言:本人没怎么做过http接口测试,只是最近学习了一下,Behave框架也是最近学习的,如果有不对的请各位大神指点,感谢! 1.1 接口准备 本次get请求的接口用的是百度接口:wd=搜 ...
- Hibernate框架双向多对多关联映射关系
建立双向多对多关联关系 Project.java (项目表) private Integer proid; private Strin ...
- C#自动弹出窗口并定时自动关闭
最近做个小项目,用到一个小功能:后台线程定时查询数据库,不符合条件的记录弹出消息提醒(在窗口最前面),并且过几秒钟再自动关闭弹出的窗口. 所以从网上找来资料,如下: WinForm 下实现一个自动关闭 ...