十九、Java基础--------IO流之字节流
在上一篇文章中介绍了IO体系以及一些基本概念和字符流的相关应用,本文着重介绍字节流的相关操作。
字节流
它的操作与字符流类似,可以参与字符流的定义、读取、写入、处理异常的格式,只不过是处理的数据不同,因为对于非字符的数据,比如图片、视频、音频文件(例如mp3)等,这些文件只能用字节流对之进行操作。
字节流的抽象基类:
|--InputStream:字节输入流
|--OutputStream:字节输出流
FileInputStream
FileInputStream是InputStream的一个子类,用于读取诸如图像数据之类的原始字节流
构造方法:
|--FileInputStream(File file)
通过打开一个到实际文件的连接来创建一个 FileInputStream,该文件通过文件系统中的 File 对象 file 指定。
|--FileInputStream(FileDescriptor fdObj)
通过使用文件描述符 fdObj 创建一个 FileInputStream,该文件描述符表示到文件系统中某个实际文件的现有连接。
|--FileInputStream(String name)
通过打开一个到实际文件的连接来创建一个 FileInputStream,该文件通过文件系统中的路径名 name 指定。
常用方法:
|--int available()返回下一次对此输入流调用的方法可以不受阻塞地从此输入流读取(或跳过)的估计剩余字节数。
|--void close()关闭此文件输入流并释放与此流有关的所有系统资源。
|--int read()从此输入流中读取一个数据字节。
|--int read(byte[] b)从此输入流中将最多 b.length 个字节的数据读入一个 byte 数组中。
|--int read(byte[] b, int off, int len)从此输入流中将最多 len 个字节的数据读入一个 byte 数组中。
应用示范
import java.io.FileInputStream;
import java.io.IOException;
public class Demo2 {
public static void main(String[] args) {
read1();
}
// 第一种读取方式:按字节来读取
public static void read1() {
FileInputStream fis = null;
try {
fis = new FileInputStream("E:/aa.java");// 新建字节读取的对象,明确源文件
int x = 0;
while ((x = fis.read()) != -1) {
System.out.print((char) x);
}
} catch (IOException e) {
e.printStackTrace();
} finally {// 执行关闭资源的操作
if (fis != null) {
try {
fis.close();
} catch (IOException e2) {
e2.printStackTrace();
}
}
}
}
// 第二种读取方式:按字节数组读取
public static void read2() {
FileInputStream fis = null;
try {
fis = new FileInputStream("E:/aa.java");// 新建字节读取的对象,明确源文件
int len = 0;
byte[] buff = new byte[1024];// 定义一个字节数组,用于存储字节
while ((len = fis.read(buff)) != -1) { // 每次将读取到的字节存储进buff数组
System.out.println(new String(buff, 0, len));// 将字节数组转换成字符串输出
}
} catch (IOException e) {
e.printStackTrace();
} finally { // 执行关闭资源的操作
if (fis != null) {
try {
fis.close();
} catch (IOException e2) {
e2.printStackTrace();
}
}
}
}
}
FileOutputStream
FileOutputStream是OutputStream的一个子类,用于写入诸如图像数据之类的原始字节的流。
构造方法:
|--FileOutputStream(File file)
创建一个向指定 File 对象表示的文件中写入数据的文件输出流。
|--FileOutputStream(File file,boolean append)
创建一个向指定 File 对象表示的文件中写入数据的文件输出流。
|--FileOutputStream(FileDescriptor desc)
创建一个向指定文件描述符处写入数据的输出文件流,该文件描述符表示一个到文件系统中的某个实际文件的现有连接。
|--FileOutputStream(String name)
创建一个向具有指定名称的文件中写入数据的输出文件流。
|--FileOutputStream(String name, boolean append)
创建一个向具有指定 name 的文件中写入数据的输出文件流。
常用方法:
|--close():关闭此文件输出流并释放与此流有关的所有系统资源。
|--write(byte[] b):将 b.length 个字节从指定byte数组写入此文件输出流中。
|--write(byte[] b, int off, int len):将指定byte数组中从偏移量 off 开始的 len 个字节写入此文件输出流。
|--write(int b):将指定字节写入此文件输出流。
应用示范
import java.io.FileOutputStream;
import java.io.IOException;
public class Demo2 {
public static void main(String[] args){
FileOutputStream fos = null;
try{
fos = new FileOutputStream("E:/aa.txt");
//定义一个字符串,因为字节流只能以字节或字节数组的形式读取
String str = "天津这个鬼地方又出现了严重的雾霾";
byte [] by =str.getBytes();//转成字节数组形式
fos.write(by);//不用刷新
}
catch (Exception e) {
e.printStackTrace();
}
finally{
if(fos!=null){
try{
fos.close();
}
catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
字节流缓冲区
字节流缓冲区同样是提高了字节流的读写效率。
对应类:
BufferedOutputStream (? extends OutputStream)
BufferedInputStream (? extends InputStream)
应用示范
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class Demo2 {
public static void main(String[] args){
BufferedInputStream buis=null;
BufferedOutputStream buos=null;
try{
//复制视频文件到指定目录
buis=new BufferedInputStream(new FileInputStream("E:\\分手大师.avi")); //使用匿名对象的方式建立字节流缓冲区对象
buos=new BufferedOutputStream(new FileOutputStream("F:\\copy_分手大师.avi"));
byte[] buff = new byte[1024*1024]; //定义一个1M的字节数组
int len = 0;
while((len=buis.read(buff))!=-1){
buos.write(buff,0,len);
}
} //关闭流资源
catch(IOException e) {
throw new RuntimeException("复制失败");
}
finally{
if(buis!=null){
try {
buis.close();
}catch (Exception e2) {
throw new RuntimeException("关闭读取流失败");
}
}
if(buos!=null){
try {
buos.close();
} catch (Exception e2) {
throw new RuntimeException("关闭写入流失败");
}
}
}
}
}
十九、Java基础--------IO流之字节流的更多相关文章
- Java基础IO流(二)字节流小案例
JAVA基础IO流(一)https://www.cnblogs.com/deepSleeping/p/9693601.html ①读取指定文件内容,按照16进制输出到控制台 其中,Integer.to ...
- 二十、Java基础--------IO流之其他对象
在上面两篇文章中介绍了IO体系并详细介绍了字节流以及字符流,本文主要是讲述操作文件的File.转化流.标准输入与输出.Properties.打印流以及序列流. File File英文为"文件 ...
- Java基础-IO流对象之字节流(Stream)
Java基础-IO流对象之字节流(Stream) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在前面我分享的笔记中,我们一直都是在操作文件或者文件夹,并没有给文件中写任何数据.现 ...
- Java基础-IO流对象之字节缓冲流(BufferedOutputStream与BufferedInputStream)
Java基础-IO流对象之字节缓冲流(BufferedOutputStream与BufferedInputStream) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在我们学习字 ...
- Java基础-IO流对象之转换流(InputStreamReader与OutoutStreamWriter)
Java基础-IO流对象之转换流(InputStreamReader与OutoutStreamWriter) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.转换流概述 我们之前 ...
- 《Java基础——IO流》
Java基础--IO流 一.字节流: 1.输入流 (InputStream) 规则: 此处用于读取txt文件中的内容. 代码: import java.io.*; public c ...
- Java基础-IO流对象之压缩流(ZipOutputStream)与解压缩流(ZipInputStream)
Java基础-IO流对象之压缩流(ZipOutputStream)与解压缩流(ZipInputStream) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 之前我已经分享过很多的J ...
- Java基础-IO流对象之随机访问文件(RandomAccessFile)
Java基础-IO流对象之随机访问文件(RandomAccessFile) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.RandomAccessFile简介 此类的实例支持对 ...
- Java基础-IO流对象之内存操作流(ByteArrayOutputStream与ByteArrayInputStream)
Java基础-IO流对象之内存操作流(ByteArrayOutputStream与ByteArrayInputStream) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.内存 ...
随机推荐
- 李洪强漫谈iOS开发[C语言-048]-打印平方表
打印平方表
- Sqoop_mysql,hive,hdfs导入导出操作
前言: 搭建环境,这里使用cdh版hadoop+hive+sqoop+mysql 下载 hadoop-2.5.0-cdh5.3.6.tar.gz hive-0.13.1-cdh5.3.6.tar.gz ...
- Hadoop.2.x_WebUV示例
一.网站基本指标(即针对于网站用户行为而产生的日志中进行统计分析) 1. PV:网页浏览量(Page View页面浏览次数,只要进入该网页就产生一条记录,不限IP,统计点每天(较多)/每周/每月/.. ...
- HTML 父元素与子元素之间的margin-top问题
问题: 父元素的盒子包含一个子元素盒子,给子元素盒子一个垂直外边距margin-top,父元素盒子也会往下走margin-top的值,而子元素和父元素的边距则没有发生变化. 代码如下: <div ...
- HTML静态网页 Window.document对象
一.找到元素: docunment.getElementById("id"):根据id找,最多找一个: var a =docunment.getElementById(&qu ...
- NeuSoft(1)构建嵌入式交叉编译环境
操作系统版本:ubuntu 12.04 内核名称:Linux 内核发行版:3.2.0-generic 内核版本:#50-Ubuntu SMP Mon Sep 12 21:18:14 UTC 2011 ...
- ACM Binary String Match
#include <stdio.h> #include <string.h> #include <stdlib.h> void SubString(char sub ...
- Web前端开发基础 第四课(盒代码模型)
盒模型代码简写 还记得在讲盒模型时外边距(margin).内边距(padding)和边框(border)设置上下左右四个方向的边距是按照顺时针方向设置的:上右下左.具体应用在margin和paddin ...
- BizTalk开发系列(二十三) BizTalk性能指标参考
BizTalk项目目前比较少,使用的客户也不多.大多只知道BizTalk是一个不错的产品,是Microsoft SOA平台的核心产品,不过还没有将其应用到生产环境.还有一些客户对BizTalk的性能不 ...
- JQuery-属性
// attr能访问到的都是html里面的样式,诸如内联样式.外部样式和外联样式该方法访问不到 $('#div1').width('400px') // 这个用来改样式css $("#div ...