(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) 返回值:返回值其实是实际 ...
随机推荐
- Python抓取百度百科数据
前言 本文整理自慕课网<Python开发简单爬虫>,将会记录爬取百度百科"python"词条相关页面的整个过程. 抓取策略 确定目标:确定抓取哪个网站的哪些页面的哪部分 ...
- css实现页面居中的一种方法
在网页制作的过程中,为方便读者的阅读,会把网页内容限定在一个较小的方框中,并居中显示,如何实现这一功能呢? 1)把正文放在一个<div>标签中,只要这个标签居中整个网页就居中了. < ...
- Ubuntu 14.04 64bit 系统下打开PHPadmin时出现缺少mysqli|mysql 扩展的解决方法(php5)
网上找了很多方法,都是翻来覆去的抄袭. 都在说把 /etc/php5/apache2/php.ini 下面的 ;extension=php_mysqli.dll 前面的 ; 注释符号去掉 再重启 ...
- 【死磕Java并发】-----Java内存模型之happend-before
在上篇博客([死磕Java并发]-–深入分析volatile的实现原理)LZ提到过由于存在线程本地内存和主内存的原因,再加上重排序,会导致多线程环境下存在可见性的问题.那么我们正确使用同步.锁的情况下 ...
- pch 文件
PCH的文件的用途: 在实际的项目开发中,如果很多地方都在使用某个类的头文件,很多地方都在使用同一个”宏”的时候:很多地方用到了NSLog()函数, 在app发布的时候,想清除掉时,此时就需 ...
- bugly集成了Tinker热更新
介绍 热更新能力是Bugly为解决开发者紧急修复线上bug,而无需重新发版让用户无感知就能把问题修复的一项能力.Bugly目前采用微信Tinker的开源方案,开发者只需要集成我们提供的SDK就可以实现 ...
- bootstrap 预定义样式风格
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 使用ViewPagerAdapter 页面引导适配器设置app启动页,引导页面的实现
一般的app第一次安装启动的时候,都会有一个启动页面和引导页的画面,然后才进入主程序.anndroid中的ViewPagerAdapter 是一个继承与PageAdapter的 页面引导适配器.由于我 ...
- javascript学习-对象与原型
javascript学习-对象与原型 Javascript语言是符合面向对象思想的.一般来说,面向对象思想需要满足以下三个基本要求: 封装,Javascript的对象可以自由的扩充成员变量和方法,自然 ...
- View Controller Transition:京东加购物车效果
冬天已经过去了,阳光越来越暖洋洋的了.还记得上学的时候,老师总说"春天是播种的季节",而我还没在朋友圈许下什么愿望.一年了,不敢想象回首还能看到点什么,所以勇往直前.当被俗世所扰, ...