news 2026/10/21 9:32:13

Java字节流

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Java字节流

一、概述

1.可以直接操作字节信息的流对象

2.根据流向,可以分为字节输入流和字节输出流

3.顶层抽象父类分别是:InputStream 和 OutputStream

4.根据交互设备的不同,有不同的具体子类。

往下是案例,案例要求:

要求现在d盘文件中建一个 aaa.txt文档 或者 bbb.txt文档

二、InputStream

InputStream把数据源读到程序中。是一个抽象类,不能直接创建对象,只能由子类创建对象,最长用的子类FileInputStream,用于和磁盘上的文件进行交互。

FileInputStream构造方法:

FileInputStream(File f):将file对象封装成字节输入流,将来读取文件中的信息

FileInputStream(String path):将文件路径字符串封装成字节输入流,将来读取信息

FileInputStream中的方法:

  • read();一次只能读到一个字节,读取到的是数字,是字母对应的码值,如果需要转成字符,可以强制转成char类型。当read() 的值为-1时表示读到了文件的末尾。
  • read(byte[] arr);将arr.length 个字节读取到arr数组中,返回的是往数组中存了多少字节
  • available(): 设置合适大小的数组
  • skip():跳过n个字节

案例一:单纯输出得取到的字节

//单纯输出读取到的字节 public static void main(String[] args) { InputStream is =null; try { // InputStream is = new FileInputStream("d:/aaa.txt");用下面的也可以 is = new FileInputStream(new File("d:/aaa.txt")); // is.read();一次只能读到一个字节 int x = 0; while((x= is.read())!=-1) { System.out.println(x);//输出读取到的字节 } } catch (Exception e) { e.printStackTrace(); }finally { //关闭流 if(is!=null){ try { is.close(); } catch (IOException e) { throw new RuntimeException(e); } } } }

案例二:将取到的字节一次性放入byte[ ]数组中,由于定义的数据太长 所以长出来的默认都是0,但又怕定义数组短 ,所以请看案例三

public static void main(String[] args) { InputStream is =null; try { // InputStream is = new FileInputStream("d:/aaa.txt");用下面的也可以 is = new FileInputStream(new File("d:/aaa.txt")); // is.read();一次只能读到一个字节 byte[] b = new byte[1024]; is.read(b);//一次性将数据读到一个数组中 for (byte b1 : b) { System.out.println(b1); } } catch (Exception e) { e.printStackTrace(); }finally { //关闭流 if(is!=null){ try { is.close(); } catch (IOException e) { throw new RuntimeException(e); } } } }

案例三 解决方案 正确方法

public static void main(String[] args) { InputStream is =null; try { // InputStream is = new FileInputStream("d:/aaa.txt");用下面的也可以 is = new FileInputStream(new File("d:/aaa.txt")); // is.read();一次只能读到一个字节 byte[] b = new byte[is.available()]; // 字节数组的长度读到多大就多大 is.read(b); for (int i = 0; i< b.length; i++) { System.out.print((char)b[i]); } } catch (Exception e) { e.printStackTrace(); }finally { //关闭流 if(is!=null){ try { is.close(); } catch (IOException e) { throw new RuntimeException(e); } } } }

三、OutputStream

OutputStream字节输出流的顶级抽象父类,最常用子类FileOutputStream

FileOutputStream构造方法

FileOutputStream(File f):将f描述的路径文件封装成字节输出流对象

FileOutputStream(String path):将path描述的文件路径封装成字节输出流对象

OutputStream的常用方法:

  • write(int b):一次写一个字节
  • write(byte[] b):使用数组缓冲区
  • write(“abc".getByte()):也可以写一个字符串,将字符串转换成数组

示例代码:

public static void main(String[] args) { OutputStream os =null; try { //os = new FileOutputStream("d:/bbb.txt"); 这样写的话会这节覆盖掉原文件中的数据 os = new FileOutputStream("d:/bbb.txt",true);//这样写不会覆盖,p拼接的意思 os.write(100);//会把对应的字母写进去d byte[] bytes = {65,66,67,68,69,70}; os.write(bytes);//会把对应的数组写进去 os.write("hello".getBytes());//会把对应的字符串写进去 } catch (Exception e) { e.printStackTrace(); }finally { //关闭流 if(os!=null){ try { os.close(); } catch (IOException e) { throw new RuntimeException(e); } } } }

四、使用字节流文件拷贝

public static void main(String[] args) { InputStream is =null; OutputStream os =null; try { //拷贝哪个文件就读入哪个文件 is = new FileInputStream("d:/bbb.txt"); os = new FileOutputStream("d:/zyx.txt",true);//这样写不会覆盖,p拼接的意思 byte[] bytes = new byte[1024]; int len=0; while((len=is.read(bytes))!=-1){ os.write(bytes,0,len); } } catch (Exception e) { e.printStackTrace(); }finally { //关闭流 if(is!=null){ try { os.close(); } catch (IOException e) { throw new RuntimeException(e); } } if(os!=null){ try { os.close(); } catch (IOException e) { throw new RuntimeException(e); } } } }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/21 9:31:57

Elasticsearch AutoOps 免费开放:从集群诊断到运维闭环的实战解读

1. 免费开放的真正含义&#xff1a;从付费插件到默认能力1.1 几年前我们是怎么排查集群问题的我记得早期维护Elasticsearch集群的时候&#xff0c;最怕的不是查询慢&#xff0c;而是不知道它为什么慢、为什么出问题。当时我们用的是老一套的排查路径&#xff1a;先看监控大盘&a…

作者头像 李华
网站建设 2026/10/21 9:31:37

Selenium模拟登录遇验证码?从截图到打码平台全链路解决

做Web自动化或者写爬虫脚本的兄弟&#xff0c;大概率都撞过同一堵墙&#xff1a;登录页上的验证码。Selenium本身能点击、能输入、能提交表单&#xff0c;但唯独见到验证码就卡壳。这玩意儿存在的意义就是拦机器人&#xff0c;而Selenium在网站眼里就是一个“机器人”。所以想用…

作者头像 李华
网站建设 2026/10/21 9:30:35

AI视频多镜头场景怎么保持一致?状态表、道具接续与异常回归

做多镜头 AI 视频时&#xff0c;一个常见错误是把“画风差不多”当成“场景接得上”。树桩还在原位&#xff0c;人物衣服也差不多&#xff0c;但上一镜头手里拿着的锄头下一镜头突然不见&#xff1b;字幕说“日子一天天过去&#xff0c;田荒了”&#xff0c;画面前景却还长着成…

作者头像 李华
网站建设 2026/10/21 9:30:17

无人机PID调参新思路:非线性增益调度与元启发式优化

做无人机飞控这件事&#xff0c;调PID是个绕不开的环节。我见过不少开发者在初期把一个参数一个参数地试&#xff0c;试到后面自己都不记得哪组组合有效&#xff0c;更麻烦的是&#xff0c;换一个飞行工况可能又得从头再来。某个项目里我接手一台悬停性能很不稳定的四旋翼&…

作者头像 李华
网站建设 2026/10/21 9:29:41

轻量级图表设计器实战:SVG渲染、坐标系统与连线算法

写一个图表设计器这个念头&#xff0c;我脑子里转了大半年。之前画架构图、流程图全靠外部工具&#xff0c;免费版限制节点数&#xff0c;样式丑到没法看&#xff0c;导出的图片塞进文档里还经常模糊。后来接到一个内部系统需求&#xff0c;要在网页上直接展示并编辑几张架构图…

作者头像 李华
网站建设 2026/10/21 9:28:20

校园外卖小程序毕业设计全流程拆解:从云开发到订单状态机

样&#xff0c;也要能支撑起一篇像样的设计文档和一场说得过去的答辩。这个题目可以说是“入门友好、上限够用”的典型代表&#xff0c;所以它烂大街&#xff0c;但不代表它没含金量。关键在于&#xff0c;你怎么把它做出差异化&#xff0c;怎么在实现里体现出对业务逻辑和工程…

作者头像 李华