字节流(IO流)概述、字节流(写入/输出)数据(3种)和换行、追加写入、异常处理办法、字节缓冲流、字节流复制图片视频案例

目录

    • IO流概述和分类
    • 字节流写入数据(OutputStream)
      • FileOutputStream
      • 字节流写数据的3种方式
    • 字节流写入数据的两个小问题
      • 字节流写数据如何换行
      • 字节流如何实现追加写入
    • 字节流写入数据加入异常处理
    • 字节流读取数据(InputStream)
      • FileInputStream
      • 字节流读取数据的三种方法
    • 字节缓冲流(Buffer)
      • BufferedOutputStream
      • BufferedInputStream
    • 字节流复制图片视频案例(附字节流和字节缓冲流速度比较)
      • 复制图片
      • 复制视频

IO流概述和分类

IO流分类:

  1. 按数据的流向:
    输入流(in):读数据(read)
    输出流(out):写数据(write)
  2. 按照数据类型来分:
    字节流:字节输入流、字节输出流
    字符流:字符输入流、字符输出流
  3. 一般来说:IO流是按数据类型来分的
  4. 如果数据通过Windows自带的记事本软件打开,我们还可以读得懂里面的内容,那就是字符流,否则就是字节流。如果你不知道该用哪种类型的流,就是字节流

字节流写入数据(OutputStream)

注意:

  • InputStream:表示字节输入流所有类的超类
  • OutputStream:表示输出流所有类的超类
  • 子类名特点:子类名称都是以其父类名作为子类名的后缀

FileOutputStream

FileOutputStream:所在包:java.io
public class FileOutputStreamextends OutputStream

FileOutputStream:文件输出流用于将数据写入File:
构造方法FileOutputStream(String name):

创建文件输出流以指定的名称写入文件
FileOutputStream fos=new FileOutputStream("myByteStream\\fos.txt");          
//该类一共做了三件事情 
A:调用了系统功能创建了文件(fos.txt)          //就算该抽象文件名的文件不存在也会自动创建该文件
B:创建了字节输出流对象 
C:让字节输出流对象指向创建好的文件     //类似指针//调用写入方法void write(int b);fos.write(97);//最后IO流要释放资源 调用close方法:关闭此文件输出流并释放与此流相关联的任何系统资源fos.close();        

使用字节输出流写数据的步骤

字节流写数据的3种方式

方法名作用
void write(int b)将指定的字节写入此文件输出流,一次写一个字节数据
void write(byte[] by)将b.length字节从指定的字节数组写入子文件输出流,一次写一个字节数组数据
void write(byte[] b,int off,int len)将len字节从指定的字节数组开始,从偏移量off开始写入此文件输出流,一次写一个字节数组的部分数据(以off为索引写len长度的数据)
void flush()清空流并强制将缓冲区中所有数据写入流中

代码示例:

输出流的两种构造函数
FileOutputStream(String name);
FileOutputStream(File file);FileOutputStream f1 = new FileOutputStream();f1.write(97);        //void write(int b)写入数据 字符数据在文件中显示abyte[] b = {97,98,99,100};     f1.write(b);     //void write(byte[] b)写入数据 字符数据在文件中显示abcdbyte[] c = "abcdefghi".getBytes();    //利用String.getBytes()方法获取byte数组 更直观的定义文件中的字符数据f1.write(c);       //void write(byte[] b)写入数据 字符数据在文件中显示abcdefghif1.write(c,3,3);           //void write(byte[] b,int off,int len)写入数据 //从off索引开始往后输出len长度的数据 输出byte[3]--byte[6]的数据defgf1.close();

字节流写入数据的两个小问题

字节流写数据如何换行

写完数据后,加上换行符:
Windows:\r\n
Linux:\n
Mac:\r
例:f1.write(97);
f1.write("\r\n".getBytes());    
//注意换行符是String类型,需要用getBytes()方法将String类型转换为byte[]类型才能完成转换

字节流如何实现追加写入

public FileOutputStream(String name,boolean append);   
创建文件输出流以指定的名称写入文件。
如果第二个参数值为true,则字节将写入文件的末尾而不是开头(在没有append参数的情况下默认写入文件开头

字节流写入数据加入异常处理

finally:在异常处理时提供finally块来执行所有清除操作。比如IO流中的释放资源
特点:被finally控制的语句一定会执行,除非JVM退出

字节流异常处理标准格式:

try{可能出现异常的代码;
}catch(异常类名 变量名){变量名.异常处理代码;
}finally{执行所有清除操作;
}

代码示例:

Public static void main(String[] args){FileOutputStream f1 = null;      
//定义在try外面避免执行finally语句时找不到f1变量   注意在外部定义时要进行初始化(f1=null)try{f1 = new FileOutputStream("D:\\java000\\test001\\java.txt");f1.write(97);}catch(IOException e){e.printStackTrace();}finally{try{if(f1 != null)f1.close();         
//执行f1=new FileOutputStream("D:\\java000\\test001\\java.txt");
//时因该考虑初始化失败问题所以加入if避免空指针异常}catch(IOException e){e.printStackTrace();}}
}

字节流读取数据(InputStream)

使用字节流读数据的步骤:
1.创建字节输入流对象
2.调用字节输入流对象的读数据方法
3.释放资源

FileInputStream

所在包:java.io
public class FileInputStreamextends InputStream
构造函数:FileInputStream(String name);

代码示例:

	FileInputStream f1 = new FileInputStream("test001\\java.txt");int by=f1.read();        //调用字节输入流对象的读数据方法System.out.print(by);    f1.close();

字节流读取数据的三种方法

方法名作用
int read()从这个输入流读取一个字节的数据
int read(byte[] b)读取b.length字节的数据,从这个输入流到一个字节数组
int read(byte[] b,int off,int len)读取len字节的数据,从这个输入流到一个字节数组
long skip(long n)从输入流跳过,丢弃n字节的数据输入流

代码示例:

read(int b);
例:FileInputStream f1 = new FileInputStream("D:\\java000\\test001\\java.txt");int by;while((by = f1.read())!=-1){System.out.print((char)by);}f1.close();read(byte[] b);
例:FlieInputStream f1 = new FlieInputStream("D:\\java000\\test001\\java.txt");byte[] by = new byte[1024]    //一般长度设置为1024的倍数int len; while(( len = f1.read(by) ) != -1){                                    
//注意:len=f1.read(by);中len表示f1文件中读到的字符数量 
//当byte[n]中n小于len时 read()读出的是n长度的字符System.out.print( new String(by) );             //len表示read方法所读到的字符数量}f1.close();read(byte[] b,int off,intlen);
例:FileInputStream f1 = new FileInputStream("D:\\java000\\test001\\java.txt");byte[] b = new byte[1024];int len;while( ( len=f1.read(by) )!=-1 ){System.out.print( new String(by,0,len) );            //new String(byte[] bytes,int offset,int length):
通过使用平台默认字符集解码指定的字节子阵列来构造新的String.
就是转换byte[0]~byte[len]成为新的String
}

字节缓冲流(Buffer)

BufferedOutputStream

所在包:java.io
public class BufferedOutputStreamextends FilterOutputStream

该类实现缓冲输出流。通过设置这样的输出流,应用程序可以向底层输出流写入字节,而不必为写入的每个字节导致底层系统的调用

BufferedInputStream

所在包:java.io
public class BufferedInputStreamextends FilterInputStream

创建BufferedInputStream将创建一个内部缓冲区数组。当从流中读取或跳过字节时,内部缓冲区将根据需要从所包含的输入流中重新填充,一次很多字节。
构造方法:

字节缓冲输出流:BufferedOutputStream(OutputStream out)
字节缓冲输入流:BufferedInputStream(InputStream in)
为什么构造方法需要的是字节流,而不是具体的文件或者路径呢?
字节缓冲流仅仅提供缓冲区,而真正的读写数据还得依靠基本的字节流对象进行操作

代码示例:

字节缓冲输出流:
BufferedOutputStream bf1 = new BufferedOutputStream( new FileOutputStream("test001\\java.txt") );
bf1.write("abcdefg\r\n".getBytes);  //String转换为byte类型用String.Bytes();方法
bf1.close();字节缓冲输入流:
BufferedInputStream bf2 = new BufferedInputStream( new FileInputStream("test001\\java.txt") );
byte[] by = new byte[1024];
int len;
while( (len=bf2.read(by))!=-1 ){System.out.print( new String(by,0,len) );
}
bf2.close();

字节流复制图片视频案例(附字节流和字节缓冲流速度比较)

复制图片

代码示例:

使用字节数组读写复制即可:FileInputStream in = new FileInputStream("数据源文件");FileOutputStream  out = new FileOutputStream("目的地文件");byte[] by=new byte[1024];int len;while( (len=in.read(by))!=-1 ){out.write(by,0,len);}in.close();out.close();
注意:字节流复制可以复制任意文件流程:1.创建输入流(InputStream)2.创建输出流(OutputStream)3.循环复制
4.close释放资源

复制视频

利用四种方法来复制视频,并比较四种方法之间哪种方法最快1.基本字节流一次读写一个字节                     //最慢2.基本字节流一次读写一个字节数组              //比第1种快60+倍3.字节缓冲流一次读写一个字节                     //比第3种慢一点点4.字节缓冲流一次读写一个字节数组              //最快
时间记录由System.currentTimeMillis();方法记录
int start = System.currentTimeMillis();
int end = System.currentTimeMillis();

代码示例:

1.基本字节流一次读写一个字节:   FileOutputStream fout1=new FileOutputStream("复制目的地");FileInputStream fin1=new FileInputStream("视频源");int by;while( (by=fin1.read() ) != -1){fout1.write(by);}fout1.close();fin.close();2.基本字节流一次读写一个字节数组:FileOutputStream fout1=new FileOutputStream("复制目的地");FileInputStream fin1=new FileInputStream("视频源");int len;byte[] by = new byte[1024];while( (len=fin1.read(by))!=-1 ){fout1.write(by,0,len);     
//将len字节从指定的字节数组开始,从偏移量off开始写入此文件输出流,
//一次写一个字节数组的部分数据(以off为索引写len长度的数据)}fout1.close();fin.close();3.字节缓冲流一次读写一个字节:BufferedOutputStream bout1=new BufferedOutputStream("存入目标");BufferedInputStream bin1=new BufferedInputStream("目标源文件");int by;while( (by=bin1.read())!=-1 ){bout1.write(by);}bout1.close();bin1.close();4.字节缓冲流一次读写一个字节数组:BufferedOutputStream bout1=new BufferedOutputStream("存入目标");BufferedInputStream bin1=new BufferedInputStream("目标源文件");int len;byte[] by=new byte[1024];while( (len=bin1.read())!=-1 ){bout1.write(by,0,len);}bout1.close();bin1.close();

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/252355.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

字节流

字节流 根据数据的流向分为:输入流和输出流。 输入流 :把数据从其他设备上读取到内存中的流。输出流 :把数据从内存 中写出到其他设备上的流。 格局数据的类型分为:字节流和字符流。字节流 :以字节为单位&#xff0c…

1、字节流详解

文章目录 一、字节流1、字节输出流:OutputStream2、字节输入流:InputStream3、使用字节流复制数据4、字节缓冲流 一、字节流 文件字节流 字节流的两个抽象父类:字节输出流:OutputStream和字节输入流:InputStream 1、字…

PS美工教程:制作真实水面倒影效果详细步骤

倒影效果是电商海报和广告类海报常用的表现手法,倒影可以填充画面的空白区域和营造真实的视觉感受,给受众带来更好的视觉体验。 在海报合成中倒影效果可谓是必不可少的存在,那今天潇洒模具学院的老师就教大家通过PS自带的功能打造出真实的环…

CSS图片倒影效果

先看一下效果图 废话不多说直接上代码 <!DOCTYPE html> <html><head><meta charset"utf-8"><title></title><style lang"scss">img {-webkit-box-reflect: below 0px -webkit-linear-gradient(bottom, rgba(25…

3、水面倒影效果

水面倒影效果 概要 我们会使用 Matplotlib 的 pyplot 模块创建图并显示图像&#xff1a; 用以下魔术命令&#xff0c;以便将图像显示在笔记本中而不是在新的显示窗口中&#xff1a; 如果要显示彩色图像&#xff0c;可以使用以下命令将图像从 BGR 转换为 RGB。 最后使用 plt…

CSS3实现倒影效果

css的功能很强大&#xff0c;可以实现很多效果。比如图像的倒影和文字的倒影等&#xff0c;利用的是box-reflect&#xff0c;因为浏览器兼容问题&#xff0c;目前主要采用-webkit-box-reflect来实现&#xff08;谷歌浏览器&#xff09;。 倒影的属性&#xff1a; box-reflect&…

HTML里面设置文本倒影,文字倒影怎么做

现在的文字如果仅仅是在一个平面上,不加任何效果,那就真的是太死板、太单调了,尤其追求艺术的小伙伴们啊,细心的话你就会发现那些神马广告之类的文字都讲究有个性,让人过目不忘的效果,有木有!那么接下来就教大家制作文字效果,就是文字倒影效果制作。广告时间: 人物素描…

倒影(reflections)效果的实现

1、简介 当站在湖畔岸边或者镜子面前的时候&#xff0c;都可以看到倒着的自己&#xff0c;那种效果就叫倒影&#xff0c;或者叫镜面反射。在SPE中也支持这种效果&#xff0c;实现的基本思路是把物体根据反射平面镜像之后再绘制一遍&#xff0c;绘制镜像时有几个问题需要注意&a…

渐变加蒙版做倒影

平面设计是PHOTOSHOP应用最为广泛的领域&#xff0c;无论是我们正在阅读的图书封面&#xff0c;还是大街上看到的招帖、海报&#xff0c;这些具有丰富图像的平面印刷品&#xff0c;基本上都需要PHOTOSHOP软件对图像进行处理。用Photoshop 为图片添加倒影&#xff0c;这个效果不…

联想IBM ThinkPad X201i 笔记本显示屏上方中间的键盘灯不亮解决办法

这款小黑&#xff0c;不记得13年还是14年买的&#xff0c;当年就要7千大洋&#xff0c;那时候觉得很贵咬牙买了下来&#xff0c;今天回头看来贵有贵的道理。因为现在用起来还是很爽&#xff0c;去年安装Win10&#xff0c;然后在上面开发JavaEE项目&#xff0c;很快、畅顺。最近…

ibm 服务器 总显示f1,联想ThinkPad笔记本中F1/F4键盘指示灯一直常亮着如何解决

有不少使用联想ThinkPad笔记本的小伙伴们在使用电脑的时候&#xff0c;发现遇到这样一个情况&#xff0c;就是键盘上的F1/F4键盘状态指示灯常亮&#xff0c;按FNESC组合键也无法取消&#xff0c;按FN和对应的功能键也不行&#xff0c;这可该怎么解决呢&#xff0c;一般是由于热…

联想拯救者 Lenovo Legion 通电自启 插电自启 通电开机 插电开机 Wake on AC

联想拯救者 Lenovo Legion 通电自启 插电自启 通电开机 插电开机 Wake on AC 文章目录 联想拯救者 Lenovo Legion 通电自启 插电自启 通电开机 插电开机 Wake on AC说明一、我的电脑二、详细过程1.BIOS选项2.查阅改BIOS的资料3.修改BIOS失败4.换个思路&#xff1a;不修改BIOS?…

联想键盘sk8821的Fn功能键

1. 联想键盘sk8821的Fn功能键 1.1. 恢复 F1-F12实际功能 F1-F12系统下会默认为快捷键&#xff08;功能键&#xff09;&#xff0c;而非F1-F12实际功能。可能会导致您在使用习惯上的不适应。 键盘驱动安装目录&#xff1a;X:\LX_KEY\Yangtian\Low Profile Keyboard\setup.exe …

如何关闭联想台式机电脑USB键盘的FN功能

如何关闭联想台式机电脑USB键盘的FN功能 现在很多单位配备的联想台式机所配的USB键盘&#xff0c;F1-F12系统下会默认为快捷键&#xff08;功能键&#xff09;&#xff0c;而非F1-F12实际功能。可能会导致您在使用习惯上的不适应。 通过查询联想官网有如下解决方案&#xff0c;…

禁用联想笔记本电脑自带的键盘

最近电脑键盘出现故障&#xff0c;只要一开机&#xff0c;删除键就一直被按着&#xff0c;按其它键后&#xff0c;偶尔就恢复正常状态。被逼无奈&#xff0c;今天拿去电脑维修店&#xff0c;老板说是键盘的问题&#xff0c;需要换键盘。询问价格&#xff0c;说要&#xffe5;30…

杜蕾斯鞋套?又污又高级!

阳历四月雨纷纷&#xff0c;噼里啪啦湿鞋袜。 杜蕾斯专注“防水”九十多年。眼看大家进入了雨季&#xff0c;杜蕾斯上演一出《典中典》&#xff0c;上线经典鞋套。 我怀疑你在招风惹雨&#xff0c;只是我没证据。 穿这个鞋套出门会不会社死不知道&#xff0c;但谁用这玩意儿绝对…

压缩包.zip暴力破解方法

一: 前言 本方法基于虚拟机下的kali系统,软件为kali自带的fcrackzip,有兴趣的童鞋请自行研究下载. 二:方法说明 fcrackzip -help常用参数中文说明&#xff1a; -b 暴力破解模式 -D 使用字典破解模式 -v 就是可以看到更多的信息 -u 用zip去尝试 -l 密码长度 -c 指定掩码类型&…

python暴力破解zip加密文件

前言&#xff1a; 日常工作中&#xff0c;会遇到一些加密的zip文件&#xff0c;但是因为某些原因或者时间过长&#xff0c;密码不知道了。 但是zip文件中文件有很重要很必须。那么&#xff0c;我们试一试万能的Python&#xff0c;暴力破解密码。 一、破解zip加密文件的思路&a…

《在路上 …》 金山卫士开源 , 人生很多感慨

最近写日记少了很多, 主要是很多情绪化的东西, 都汇入了某条有去无回的地下河. 好吧, 不说这些, 来说说金山卫士开源. 相比360安全卫士那种作秀式的开源 (代码只对极少极少的人开放, 隐隐藏藏), 金山这次显得很真诚. 你可以直接看到代码 http://code.ijinshan.com/ http://code…