十九、Java基础--------IO流之字节流

时间:2022-09-19 11:52:15

在上一篇文章中介绍了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流之字节流的更多相关文章

  1. Java基础IO流(二)字节流小案例

    JAVA基础IO流(一)https://www.cnblogs.com/deepSleeping/p/9693601.html ①读取指定文件内容,按照16进制输出到控制台 其中,Integer.to ...

  2. 二十、Java基础--------IO流之其他对象

    在上面两篇文章中介绍了IO体系并详细介绍了字节流以及字符流,本文主要是讲述操作文件的File.转化流.标准输入与输出.Properties.打印流以及序列流. File File英文为"文件 ...

  3. Java基础-IO流对象之字节流(Stream)

    Java基础-IO流对象之字节流(Stream) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在前面我分享的笔记中,我们一直都是在操作文件或者文件夹,并没有给文件中写任何数据.现 ...

  4. Java基础-IO流对象之字节缓冲流(BufferedOutputStream与BufferedInputStream)

    Java基础-IO流对象之字节缓冲流(BufferedOutputStream与BufferedInputStream) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在我们学习字 ...

  5. Java基础-IO流对象之转换流(InputStreamReader与OutoutStreamWriter)

    Java基础-IO流对象之转换流(InputStreamReader与OutoutStreamWriter) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.转换流概述 我们之前 ...

  6. Java基础-IO流对象之压缩流(ZipOutputStream)与解压缩流(ZipInputStream)

    Java基础-IO流对象之压缩流(ZipOutputStream)与解压缩流(ZipInputStream) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 之前我已经分享过很多的J ...

  7. Java基础-IO流对象之随机访问文件(RandomAccessFile)

    Java基础-IO流对象之随机访问文件(RandomAccessFile) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.RandomAccessFile简介 此类的实例支持对 ...

  8. Java基础-IO流对象之内存操作流(ByteArrayOutputStream与ByteArrayInputStream)

    Java基础-IO流对象之内存操作流(ByteArrayOutputStream与ByteArrayInputStream) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.内存 ...

  9. Java基础-IO流对象之数据流(DataOutputStream与DataInputStream)

    Java基础-IO流对象之数据流(DataOutputStream与DataInputStream) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.数据流特点 操作基本数据类型 ...

随机推荐

  1. dynamics_cast<>

    #include <iostream> class A { public: A(){} ~A(){} ;} }; class B:public A { public: B(){} ~B() ...

  2. UVALive 6680 Join the Conversation

    题意:conversion的定义是下一句提到上一句的人的名字.请你输出最长的对话的长度,及组成对话的序列号. 思路:动态规划的思想很容易想到,当前句子,根据所有提到的人的名字为结尾组成的对话长度来判断 ...

  3. 在package&period;json中配置Script执行npm run tslint报错问题

    今天在学习tslint的时候,按照git clone下angular2-webpack-starter的代码执行npm run lint时,虽然代码进行了检测,但检测完成后npm始终报错, //pac ...

  4. InetAddress Example program in Java

    The InetAddress class has no visible constructors. To create an InetAddress object, you have to use ...

  5. 关于Android反编译

    详情查看:http://blog.csdn.net/ordinaryjoe/article/details/8626010

  6. How to verify Certificate Pinning&quest;

    Some friends of mine they worry about the risk of Man-in-the-middle so they ask me how to verify the ...

  7. url的解码方式

    #coding:utf-8 import urllib legal_person_string = "%E6%B3%95%E5%AE%9A%E4%BB%A3%E8%A1%A8%E4%BA%B ...

  8. Windows有点腻了&quest;不如试试Ubuntu&period;

    最近在接触Python. 因为担心环境会向Java一样,很容易影响当前的工作电脑. 所以准备搭建一台虚拟机,不过Windows的尺寸是在太大了.所以,选择安装Ubuntu. Ubuntu官方网站地址: ...

  9. 2018 CCPC网络赛 几道数学题

    1002 Congruence equation 题目链接  : http://acm.hdu.edu.cn/showproblem.php?pid=6439 题解 : https://www.zyb ...

  10. uva-108-贪心

    题意: 求二维数组中子数组中的最大和. 使用二维数组,第i行表示前i行的和.那么a[i-j]表示从j行到i行的和.注意第三层循环,每次都保存当前最大的sum,如果sum小于0,直接置0. #inclu ...