(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) 返回值:返回值其实是实际 ...
随机推荐
- 详解googe Chrome浏览器(理论篇)
开篇概述 1详解google Chrome浏览器,这个标题似乎抽象了一些,我想应该把它拆分成如下几个问题,也许会更加理解一些. 问题1:目前开发中,主选浏览器有Google Chrome,IE,Fir ...
- java socket初步学习一 ( tcp)
Java socket通信程序: 第一版本: 实现功能: 服务器地址:127.0.0.1 端口:5050 客户机:端口5050 客户端发送字符:“t” 服务器接收到该字符并回复:“r” 流程: 建立 ...
- 网络爬虫与搜索引擎优化(SEO)
爬虫及爬行方式 爬虫有很多名字,比如web机器人.spider等,它是一种可以在无需人类干预的情况下自动进行一系列web事务处理的软件程序.web爬虫是一种机器人,它们会递归地对各种信息性的web站点 ...
- [傻瓜版] Redis在Windows下的开发环境配置步骤
redis默认运行在unix体系下,windows无法直接运行官方版.以下是几种解决方案, 一)Windows移植版.启动速度飞快,优先推荐使用. a) 2.6.12 是稳定版,我用64位版来做开发环 ...
- jquery与ajax的XMLHttpRequest对象介绍
首先 认识一个对象 这个对象叫XMLHttpRequest XMLHttpRequest对象可以提供在不刷新页面的情况下向服务器发送异步请求,并且接受服务器端返回的结果.从而实现局部更新当前页面的功 ...
- BZOJ 1198: [HNOI2006]军机调度(搜索)
直接暴搜就行了= = CODE: #include<cstdio> #include<iostream> #include<cstring> #include< ...
- linux 下安装eclipse和pydev插件用来开发python程序
1.网上的教程要求必须要安装java虚拟机,但是我觉得不用,但是为了不出意外就装吧. (1)去官网下载安装包www.sun.com (2)安装包是.tar.gz的可以用 tar -xzvf +压缩包路 ...
- linux下载时提示请尝试移除磁盘中不需要的文件并重试,或者保存到其他位置
因为我是用虚拟机装的linux,所以当时就分配了20G硬盘,下载了几个应用后再下载就提示我这个了.一开始我还以为是因为下载链接的问题,后来才知道原来是因为/tmp的满了. 然后我输入以下连个命令就能正 ...
- groovy学习(一)列表
numbers = [11, 12, 13, 14]println(numbers[0])println(numbers[3])println(numbers[-1])//最左边的元素println( ...
- 读书笔记 effective c++ Item 19 像设计类型(type)一样设计
1. 你需要重视类的设计 c++同其他面向对象编程语言一样,定义了一个新的类就相当于定义了一个新的类型(type),因此作为一个c++开发人员,大量时间会被花费在扩张你的类型系统上面.这意味着你不仅仅 ...