Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >JavaIO流输入输出流-字节流

JavaIO流输入输出流-字节流

作者头像
待你如初见
修改于 2018-08-03 10:22:58
修改于 2018-08-03 10:22:58
7000
举报
文章被收录于专栏:待你如初见待你如初见

IO流分为输入流、输出流

输入输出流 又分为字节流、字符流

字节流

  1. InputStream:抽象了应用程序读取数据的方式
  2. OutputStream:抽象了应用程序写 出数据的方式
  3. EOF = End 读到-1就读到结尾

输入流基本方法

int b = in.read();读取一个字节无符号填充到int低八位.-1是EOF in.read(byte[] buf) 读取数据填充到字节数组buf in.read(byte[] buf,int start, int size)读取数据到字节数组buf从buf的start位置开始存放size长度分数据

输出流的基本方法

out.write(int b) //写出一个byte到流,b的低8位

out.write(byte[] buf) //将buf字节数组都写到流

out.write(byte[] buf, int start,int size) //字节数组buf从start位置开始写size长度的字节到流

FileInputStream

具体实现了在文件上读取数据

FileInputStream

实现了向文件写出byte数据方法

代码语言:txt
AI代码解释
复制
public static void printHex(String fileName) throws IOException {
    //把文件转化为字节流十六进制进行读操作
    FileInputStream fis = new FileInputStream(fileName);
    int b;
    int i = 1;

    while ((b=fis.read()) != -1){
        if(b <= 0xf ){
            System.out.print("0");
        }             
    System.out.print(Integer.toHexString(b)+" ");
    
    if (i%10==0){
        System.out.println();
         }
     i++;
      }
 fis.close();
  } 使用字节数组读取文件

//不确定文件大小(推荐)

FileInputStream fis = new FileInputStream(fileName);

代码语言:txt
AI代码解释
复制
byte[] bytes = new byte[1024];$       
代码语言:txt
AI代码解释
复制
int num;
代码语言:txt
AI代码解释
复制
while ((num=fis.read(bytes,0,bytes.length))!=-1){
代码语言:txt
AI代码解释
复制
for (int i = 0; i < num ; i++) {                
代码语言:txt
AI代码解释
复制
    //& 0xff byte为8位,int为32位为避免数据转换出错将高24位去除
代码语言:txt
AI代码解释
复制
System.out.print(Integer.toHexString(bytes[i] & 0xff)+" ");
代码语言:txt
AI代码解释
复制
            }

}

FileInputStream fis = new FileInputStream(fileName);

byte[] bytes = new byte1024;

int b;

int i=1;

if ((b=fis.read(bytes,0,bytes.length))!=-1){

代码语言:txt
AI代码解释
复制
  for (int j = 0; j < b; j++) {
代码语言:txt
AI代码解释
复制
      System.out.print(Integer.toHexString(bytes[i] & 0xff)+ " ");
代码语言:txt
AI代码解释
复制
      if (i%10==0)
代码语言:txt
AI代码解释
复制
      System.out.println();
代码语言:txt
AI代码解释
复制
       i++;
代码语言:txt
AI代码解释
复制
}

}fis.close();

代码语言:txt
AI代码解释
复制
## FileOutPutStream

FileOutputStream fos = new FileOutputStream(fileName);

fos.write('A');

fos.write('B');$

int a =10;

fos.write(a>>>24);

fos.write(a>>>16);

fos.write(a>>>8);

fos.write(a);

byte[] utf8 = "中国".getBytes("utf-8");

fos.write(utf8);

fos.close();

代码语言:txt
复制

文件复制操作

代码语言:txt
AI代码解释
复制
public static void copyFile(File srcFile,File destFile)throws IOException{
    if(!srcFile.exists()){
        new IllegalArgumentException("文件/文件夹不存在");
    }
    if (srcFile.isFile()){
        new IllegalArgumentException("目标不是一个文件");
        }
        FileInputStream fis = new FileInputStream(srcFile);
         FileOutputStream fos = new FileOutputStream(destFile);
         byte[] bytes = new byte[1024];
         int num ;
         while ((num=fis.read(bytes,0,bytes.length)) != -1){
             fos.write(bytes,0,num);
             fos.flush();
             }
        fis.close()
        fos.close();
    }

DataInputStream/DataOutPutStream

是对“流”的扩展,可以更加方便读取int,long,String等类型数据

DataInputStream

writeInt()/writeDouble()/writeUTF()

BufferedInputStream/BufferedOutputStream

这两个流类位IO提供了带缓冲区的操作,一般打开文件进行写入或读取是,都会加上缓冲,这种流模式提高了IO的性能从应用程序中把输入放入文件,相当于将一缸水倒入另一缸水

FileOutputStream、DataoutputStream与BufferedOutputStream:

  1. FileOutputStream—>write()方法相当于一滴一滴地把水“转移”过去
  2. DataOutputStream–>writeXxx()方法会方便一些,相当于一瓢一瓢(比如int 4滴4滴转移)把水“转移”过去
  3. BufferedOutputStream—>write方法更方便,相当于一飘一瓢先放入桶中(缓冲区),再从桶中倒入到另一个缸中
  4. 读写效率对比:使用字节数组作为缓冲的流 > 使用原生缓冲的流 > 不使用缓冲的流1 2 3 4//计算时延 long start=System.currentTimeMillis(); long end=System.currentTimeMillis(); System.out.println(end-start);

后记

使用缓冲字节流复制确实是最快的方式,但对于小文件10M以下的文件体现不出优势,对于百兆文件正确使用,时间可以控制到50ms内复制文件最快的做法是将批量读取到的字节数组使用缓冲写入到文件,在机器性能范围内字节数组越大越快。在循环写入的过程中不需要使用flush,缓冲输入流在关闭的时候会将所有缓冲区的数据全部写入文件,使用flush刷新缓冲就失去了缓冲的意义。最后关闭IO流和文件流应该在finally中关闭,否则IO异常时执行不到close语句,IO流仍然没有关闭。

|:----|:----|

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-01-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
javaIO流之字节流
在java中io流分为字节流和字符流。字节流和字符流分别对应相应的读取和写入操作。整体的功能就是实现对输入输出的操作。
兰舟千帆
2022/07/16
3290
javaIO流之字节流
输入输出流(IO)
IO流用来处理设备之间的数据传输。例如:上传文件和下载文件 Java对数据的操作是通过流的方式 Java用于操作流的对象都在IO包中
星哥玩云
2022/09/14
6150
文件输入输出处理(二)-字节流
因为带字节缓冲数组返回的时读取到的长度,所以,用读取到的长度来判断是否要继续读取,和要写入多少个字节;
化羽羽
2022/10/28
3790
Java:输入输出流笔记
Java的对象序列化就是把对象写入到输出流中,用来存储或传输;反序列化就是从输入流中读取对象。
Breeze.
2022/06/08
5520
Java:输入输出流笔记
java_字节流、字符流
java.io.OutputStream 抽象类是表示字节输出流的所有类的超类,将指定的字节信息写出到目的地。它定义了字节输出流的基本共性功能方法。
咕咕星
2020/08/19
8020
【Java_19】字节流、字符流
一、IO 1. 分类 ① 按流向 输入流、输出流 ② 按类型 字节流、字符流 二、字节流 1. 一切皆为字节 * 一切数据在电脑中存储时都是以二进制数字的形式保存,都一个一个的字节,那么传输时一样如此。 * 字节流可以传输任意文件数据。在操作流的时候,我们要时刻明确,无论使用什么样的流对象,底层传输的始终为二进制数据。 2. OutputStream 抽象类 ① void close() 关闭此输出流并释放与此流相关联的任何系统资源。 ② void flush()
用户8250147
2021/02/04
5400
JDK1.9-字节流
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
cwl_java
2019/12/10
4010
java中IO流详细解释?
BufferedReader的readLine()&BufferedWriter的newLine()方法
技术从心
2019/08/07
1.8K0
字节流、字符流
字节输出流_OutputStream类&FileOutputStream类介绍
全栈程序员站长
2022/06/29
5780
字节流、字符流
java重学系列之IO字节流
生活中,你肯定经历过这样的场景。当你编辑一个文本文件,忘记了ctrl+s ,可能文件就白白编辑了。当你电脑上插入一个U盘,可以把一个视频,拷贝到你的电脑硬盘里。那么数据都是在哪些设备上的呢?键盘、内存、硬盘、外接设备等等。
大忽悠爱学习
2022/05/06
4100
java重学系列之IO字节流
第二十一天 IO-递归&字节流&字符流【悟空教程】
递归就是“在一个方法内可以再次调用自身”,如下,method方法又调用了method方法。
Java帮帮
2018/07/26
7770
第二十一天 IO-递归&字节流&字符流【悟空教程】
Java基础之IO流(二)
在上一篇中,我们一直都是在操作文件或者文件夹,并没有给文件中写任何数据。现在我们就要开始给文件中写数据,或者读取文件中的数据
Remember_Ray
2020/08/05
3320
"Java中的File类、IO基础、IO分类以及字节流的重要性"
Java的File类是用于处理文件和目录的核心类之一。它提供了一种用于访问文件系统的抽象方法,允许你创建、读取、写入、删除文件和目录,以及查询文件和目录的属性。
杨不易呀
2023/10/02
2880
【Java】16 字节流
   Java 的 IO 流是实现输入/输出的基础,它可以方便地实现数据的输入/输出操作,在 Java 中把不同的输入/输出源抽象表述为“流”(stream),通过流的方式允许 Java 程序使用相同的方式来访问不同的输入/输出源。
Demo_Null
2020/09/28
9240
【Java】16 字节流
Java中IO流,输入输出流概述与总结
根据给定的文章内容,总结为摘要总结。
别先生
2017/12/29
1.4K0
Java字节流和字符流详解
生活中,你肯定经历过这样的场景。当你编辑一个文本文件,忘记了ctrl+s ,可能文件就白白编辑了。当你电脑上插入一个U盘,可以把一个视频,拷贝到你的电脑硬盘里。那么数据都是在哪些设备上的呢?键盘、内存、硬盘、外接设备等等。 我们把这种数据的传输,可以看做是一种数据的流动,按照流动的方向,以内存为基准,分为输入input 和输出output ,即流向内存是输入流,流出内存的输出流。 Java中I/O操作主要是指使用java.io包下的内容,进行输入、输出操作。输入也叫做读取数据,输出也叫做作写出数据。
共饮一杯无
2022/11/28
1.4K0
Java字节流和字符流详解
Java学习笔记之File&递归&字节流
    对于File而言,其封装的并不是一个真正存在的文件,仅仅是一个路径而已,它可以是存在的,也可以是不存在的,将来是要通过具体的操作把这个路径的内容转换为具体存在的
Jetpropelledsnake21
2021/12/31
2600
Java学习笔记之File&递归&字节流
Java成神路 —— IO字节流
1. IO流概述和分类 1.1 IO流介绍 IO:输入/输出(Input/Output) 流:是一种抽象概念,是对数据传输的总称。也就是说数据在设备间的传输称为流,流的本质是数据传输 IO流就是用来处理设备间数据传输问题的。 常见的应用:文件复制,文件上传,文件下载 1.2 IO流的分类 按照数据的流向 输入流:读数据 输出流:写数据 按照数据类型来分 字节流 字节输入流字节输出流 字符流 字符输入流字符输出流 1.3 IO流的使用场景 如果操作的是纯文本文件,优先使用字符流 如
繁依Fanyi
2023/05/07
2710
IO流你了解多少
🧑个人简介:大家好,我是 shark-Gao,一个想要与大家共同进步的男人😉😉
程序员Leo
2023/08/02
3140
IO流你了解多少
Java基础-20(02)总结,递归,IO流
(4)FileInputStream读取数据 A:操作步骤 a:创建字节输入流对象 b:调用read()方法 c:释放资源 B:代码体现: FileInputStream fis = new FileInputStream("fos.txt"); //方式1 int by = 0; while((by=fis.read())!=-1) { System.out.print((char)by); } //方式2 byte[] bys = new byte[1024]; int le
Java帮帮
2018/03/16
7450
相关推荐
javaIO流之字节流
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档