当前位置: 首页 > news >正文

FileInputStream文件字节输入流

一.概念

以内存为基准,把磁盘文件中的数据以字节形式读入内存中

二.构造器

public FileInputStream(File file)

public FileInputStream(String pathname)

这两个都是创建字节输入流管道与源文件接通

三.方法

public int read() :每次读取一个字节返回,如果发现没有数据可读,返回-1。

public int read(byte[] buffer) :每次用一个字节数组读取数据,返回字节数组读取了多少字节,如果发现没有数据可读,返回-1.

四.执行

方法一:一个一个字节读

1.代码
package org.example;import java.io.*;public class day05 {public static void main(String[] args) throws IOException {//1.创建文件字节输入流管道与源文件接通:两种方法都行InputStream f1 = new FileInputStream(new File("D:\\temp\\day05\\a.txt"));InputStream f2 = new FileInputStream("D:\\temp\\day05\\a.txt");//2.读取文件的字节数据int b1 = f1.read();System.out.println(b1);System.out.println((char) b1);int b2 = f1.read();System.out.println(b2);System.out.println((char) b2);int b3 = f1.read();System.out.println(b3);}
}
2.结果

 

上面代码一个一个字节读太麻烦了,而且读取汉字会乱码,下面进行优化

方法二:循环读

1.代码
package org.example;import java.io.*;public class day05 {public static void main(String[] args) throws IOException {InputStream f1 = new FileInputStream("D:\\temp\\day05\\b.txt");int b; //用于记住读取的字节while((b = f1.read()) != -1){System.out.print((char)b);}f1.close();}
}

上面代码读取性能很差,且读取汉字会乱码,需要进一步改进 ;流使用完必须要关闭,释放系统资源。

2.结果

方法三:每次读取多个字节

1.代码
package org.example;import java.io.*;public class day05 {public static void main(String[] args) throws IOException {//b.txt内容:abcdefgInputStream f1 = new FileInputStream("D:\\temp\\day05\\b.txt");//开始读取文件中的字节数据,每次读取多个字节byte[] buffer = new byte[4];int len = f1.read(buffer);String s = new String(buffer);System.out.println(s);System.out.println("读取的字节数"+len);int len2 = f1.read(buffer);String s2 = new String(buffer);System.out.println(s2);System.out.println("读取的字节数"+len2);f1.close();}
}
2.结果

正常情况下,第二次读取的结果应该是efg而不是efgd

3.改进
package org.example;import java.io.*;public class day05 {public static void main(String[] args) throws IOException {//b.txt内容:abcdefgInputStream f1 = new FileInputStream("D:\\temp\\day05\\b.txt");//开始读取文件中的字节数据,每次读取多个字节byte[] buffer = new byte[4];int len = f1.read(buffer);String s = new String(buffer);System.out.println(s);System.out.println("读取的字节数"+len);int len2 = f1.read(buffer);String s2 = new String(buffer,0,len2);System.out.println(s2);System.out.println("读取的字节数"+len2);f1.close();}
}
4.结果 

这个代码有待优化,用循环进一步优化

 方法四:循环读取

1.代码
package org.example;import java.io.*;public class day05 {public static void main(String[] args) throws IOException {//b.txt内容:abcdefgInputStream f1 = new FileInputStream("D:\\temp\\day05\\b.txt");//开始读取文件中的字节数据,每次读取多个字节byte[] buffer = new byte[4];int len;while ((len = f1.read(buffer)) != -1) {String s = new String(buffer, 0, len);System.out.print(s);}f1.close();}
}
2.结果

 

五.问题 

上面代码读取性能提升了,但依旧在读取汉字上会产生乱码

解决方案一:定义一个与文件一样大的字节数组,一次性读取完文件的全部字节(不推荐)

 方法1

1.代码
package org.example;import java.io.*;public class day05 {public static void main(String[] args) throws IOException {//c.txt内容:我们在一起abcdInputStream f1 = new FileInputStream("D:\\temp\\day05\\c.txt");//这里的19可以用f1.length()获取byte[] buffer = new byte[19];int len;while ((len = f1.read(buffer)) != -1) {String s = new String(buffer, 0, len);System.out.print(s);}f1.close();}
}
2.结果

 

 方法2

1.代码
package org.example;import java.io.*;public class day05 {public static void main(String[] args) throws IOException {//c.txt内容:我们在一起abcdInputStream f1 = new FileInputStream("D:\\temp\\day05\\c.txt");final byte[] bytes = f1.readAllBytes();System.out.println(new String(bytes));}
}
2.结果

上面代码还有待优化,万一文件特别大,用readAllBytes()会抛出异常。

 

相关文章:

FileInputStream文件字节输入流

一.概念 以内存为基准,把磁盘文件中的数据以字节形式读入内存中 二.构造器 public FileInputStream(File file) public FileInputStream(String pathname) 这两个都是创建字节输入流管道与源文件接通 三.方法 public int read() :每次读取一个字节返回,如…...

【Qt】窗口和对话框区别、主窗口和二级窗口区别、QMainWindow和QDialog区别

窗口和对话框(Window and Dialog Widgets) 未嵌入在父界面中的界面称为窗口。(通常,窗口具有边框和标题栏,尽管也可以使用合适的窗口标志创建没有此类标志的窗口)。 在Qt中,QMainWindow和QDial…...

Python参数种类介绍

Python参数种类介绍 相比于一些其他编程语言,Python提供了更多的参数种类选项。这是Python的一大特点,使用不同的参数类型,可以提高函数的可读性和可维护性。例如,使用关键字参数可以使函数调用更加清晰,不需要记住参数…...

react事件机制

React 事件机制 React的事件机制是React框架中非常重要的一部分,用于处理用户交互和用户界面上的事件。React的事件机制在底层使用了虚拟DOM以及合成事件来提高性能和跨浏览器兼容性。以下是关于React事件机制的详细信息: 合成事件(Syntheti…...

JAVA删除excel指定列

首先POI没有提供删除列的API,所以就需要用其他的方式实现。 在 java - Apache POI xls column Remove - Stack Overflow 这里找到了实现方式: 先将该列所有值都清空,然后将该列之后的所有列往前移动。 下面的工具类中 deleteColumns(Inpu…...

Netty编码器和解码器

文章目录 一、Decoder原理与实践1、ByteToMessageDecoder解码器2、自定义整数解码器1)常规方式2)ReplayingDecoder解码器 3、分包解码器3、MessageToMessageDecoder解码器 二、Netty内置的Decoder1、LineBasedFrameDecoder解码器2、DelimiterBasedFrameD…...

大语言模型(LLM)综述(三):大语言模型预训练的进展

A Survey of Large Language Models 前言4. PRE-TRAINING4.1数据收集4.1.1 数据源4.1.2 数据预处理4.1.3 预训练数据对LLM的影响 4.2 模型架构4.2.1 典型架构4.2.2 详细配置4.2.3 预训练任务4.2.4 解码策略4.2.5 总结和讨论 4.3 模型训练4.3.1 优化设置4.3.2 可扩展的训练技术 …...

如何在Node.js中使用环境变量或命令行参数来设置HTTP爬虫ip?

首先,定义问题:在 Node.js 应用程序中,我们可以通过环境变量或命令行参数来设置HTTP爬虫ip,以便在发送请求时使用这些HTTP爬虫ip。 亲身经验:我曾经需要为一个项目设置HTTP爬虫ip,以便在发送请求时使用这些…...

VMware打开共享虚拟机后找不到/mnt/hgfs/文件夹,以及不能拖拽/复制粘贴等操作,ubuntu不能安装VMware tools

问题原因 我的问题出现原因是,安装ubuntn虚拟机的时候VMware tools没有安装好,需要重新安装,但安装选项是暗的,不能操作。 类似这种情况,虚拟机开启时也是,因为我虚拟机已经装好了,开启时是亮…...

pytorch 入门 (五)案例三:乳腺癌识别识别-VGG16实现

本文为🔗小白入门Pytorch内部限免文章 🍨 本文为🔗小白入门Pytorch中的学习记录博客🍦 参考文章:【小白入门Pytorch】乳腺癌识别🍖 原作者:K同学啊 在本案例中,我将带大家探索一下深…...

【QT开发(14)】QT P2P chat 聊天

在【P2P学习(2)】P2P 通信,主要存在四种不同的网络模型的第一阶段:集中式P2P 模式 最简单的路由方式就是集中式,即存在一个中心节点保存了其他所有节点的索引信息,索引信息一般包括节点 IP 地址、端口、节…...

解决adb root命令时错误 adbd cannot run as root in production builds

我测试的手机是小米8,root权限已经刷过了,但是在pc端使用adb root命令的时候,会报错"adbd cannot run as root in production builds" 后来查资料发现是因为Magisk和安卓9版本的问题 https://www.cnblogs.com/jeason1997/p/124105…...

操作系统中套接字和设备独立性软件的关系

网络编程就是编写程序让两台联网的计算机相互交换数据。在我们不需要考虑物理连接的情况下,我们只需要考虑如何编写传输软件。操作系统提供了名为“套接字”,套接字是网络传输传输用的软件设备。 这是对软件设备的解释: 在操作系统中&#…...

C++ Qt/VTK装配体组成联动连接杆

效果 关键代码 #include "View3D.h" #include "Axis.h"#include <vtkActor.h> #include <vtkAppendPolyData.h > #include <vtkAreaPicker.h> #include <vtkAxesActor.h> #include <vtkBox.h> #include <vtkCamera.h>…...

File文件查找

用的是递归调用&#xff0c; &#xff08;递归死循环的结果是导致栈内存溢出错误&#xff09; 一.代码 package org.example;import java.io.File;public class day03 {public static void main(String[] args) {//文件查找&#xff0c;在d&#xff1a;temp下查找改名.mp4sea…...

小程序 wxml2canvas开发文档

wxml: <view class"share__canvas share__canvas1"><view class"share__canvas1-text draw_canvas" data-type"text" data-text"这是一段无边距文字">这是一段无边距文字</view> </view> <canvas canvas-…...

SpringCloud微服务 【实用篇】| 认识微服务

目录 一&#xff1a;认识微服务 1. 微服务框架介绍 2. 服务架构演变 3. 微服务技术对比 4. SpringCloud 图书推荐&#xff1a;《巧用ChatGPT快速提高职场晋升力》 一&#xff1a;认识微服务 本课程学习于黑马&#xff0c;会通过分层次学习&#xff0c;分为三部分去讲解微…...

Csdn文章编写参考案例

这里写自定义目录标题 欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题&#xff0c;有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants 创建一个自定义列表如何创建一个…...

Jmeter性能测试:高并发分布式性能测试

​一、为什么要进行分布式性能测试 当进行高并发性能测试的时候&#xff0c;受限于Jmeter工具本身和电脑硬件的原因&#xff0c;无法满足我们对大并发性能测试的要求。 基于这种场景下&#xff0c;我们就需要采用分布式的方式来实现我们高并发的性能测试要求。 二、分布式性能…...

2015年亚太杯APMCM数学建模大赛B题城市公共交通服务水平动态评价模型求解全过程文档及程序

2015年亚太杯APMCM数学建模大赛 B题 城市公共交通服务水平动态评价模型 原题再现 城市公共交通服务评价是城市公共交通系统建设和提高公共交通运营效率的重要组成部分。对于公交企业&#xff0c;管理和规划部门&#xff0c;传统公交车站、线路和换乘枢纽的规划数据只是基于主…...

all-MiniLM-L6-v2效果展示:实测文本相似度计算,准确率惊艳

all-MiniLM-L6-v2效果展示&#xff1a;实测文本相似度计算&#xff0c;准确率惊艳 1. 模型能力概览 all-MiniLM-L6-v2作为轻量级语义嵌入模型的代表&#xff0c;在保持高效推理的同时&#xff0c;展现出令人惊喜的文本理解能力。这个基于BERT架构的模型通过知识蒸馏技术&…...

K3s证书过期急救指南:5分钟搞定证书轮换(附一键脚本)

K3s证书过期急救指南&#xff1a;5分钟搞定证书轮换&#xff08;附一键脚本&#xff09; 凌晨三点&#xff0c;报警短信突然炸响——K3s集群所有服务不可用。登录控制台看到满屏的x509: certificate has expired or is not yet valid报错时&#xff0c;我才意识到证书过期这个&…...

2025_NIPS_JavisGPT: A Unified Multi-modal LLM for Sounding-Video Comprehension and Generation

JavisGPT 论文核心总结与翻译 一、主要内容总结 JavisGPT 是首个面向同步音视频(sounding video)理解与生成的统一多模态大语言模型(MLLM),核心解决现有模型将音视频视为独立模态、缺乏时空同步建模的问题。 模型采用编码器-LLM-解码器架构,以 Qwen2.5-VL-7B-Instruct…...

OpenClaw备份方案:Qwen3-4B-Thinking自动化数据归档系统

OpenClaw备份方案&#xff1a;Qwen3-4B-Thinking自动化数据归档系统 1. 为什么需要自动化备份系统 作为一个长期与代码和数据打交道的开发者&#xff0c;我经历过太多次"数据灾难"——硬盘突然损坏导致项目丢失&#xff0c;误删重要文件后无法恢复&#xff0c;甚至…...

从Claude Code代码泄漏到AI Agent逻辑设计VS龙虾OpenClaw

近期 Anthropic的Claude Code 的源码泄露事件,为业界提供了一份价值连城的“活体解剖指南”。本文将深入对比高内聚的 Claude Code 架构与高解耦的 OpenClaw 通用框架,从系统执行逻辑、上下文管理、OS 沙盒交互以及记忆提纯等维度,探讨次世代 AI Agent 在模型推理与工程落地…...

I2C总线原理与嵌入式系统应用实践

1. I2C总线基础解析I2C&#xff08;Inter-Integrated Circuit&#xff09;总线是Philips半导体&#xff08;现NXP&#xff09;在1982年推出的双线制串行通信协议。作为一名电子工程师&#xff0c;我在多个嵌入式项目中都深度使用过这种总线。它的精妙之处在于仅用两根线&#x…...

OpenClaw模型微调:gemma-3-12b-it针对自动化任务的专项优化

OpenClaw模型微调&#xff1a;gemma-3-12b-it针对自动化任务的专项优化 1. 为什么需要专项优化&#xff1f; 当我第一次将OpenClaw接入gemma-3-12b-it模型时&#xff0c;发现了一个有趣的现象&#xff1a;这个号称"指令优化"的模型在处理简单问答时表现优异&#x…...

[具身智能-230]:大模型编程的一个最佳实践:先通过自然语言让大模型编写Python语言代码,功能和性能调通后,再让大模型把python程序转换成C++或其他语言的程序

这种“Python 原型验证 C 性能落地”的开发模式&#xff0c;完美契合了大模型&#xff08;LLM&#xff09;的能力特点以及现代软件工程的需求。结合最新的行业实践和技术原理&#xff0c;我为你深度解析为什么这种工作流如此有效&#xff0c;以及在实际操作中需要注意的关键点…...

OpenClaw任务编排:Qwen3-4B-Thinking-2507-GPT-5-Codex-Distill-GGUF处理依赖型工作流

OpenClaw任务编排&#xff1a;Qwen3-4B-Thinking-2507-GPT-5-Codex-Distill-GGUF处理依赖型工作流 1. 为什么需要任务编排 去年夏天&#xff0c;我接手了一个数据分析项目&#xff0c;需要定期从十几个网站抓取数据&#xff0c;清洗后生成分析报告&#xff0c;再邮件发送给团…...

网络协议封神考点:TCP协议是如何保证可靠传输的?原理+流程图+硬核详解

网络协议封神考点&#xff1a;TCP协议是如何保证可靠传输的&#xff1f;原理流程图硬核详解一、前言二、基础定义&#xff1a;什么是TCP可靠传输&#xff1f;三、TCP保证可靠传输的6大核心机制&#xff08;必考&#xff09;3.1 机制1&#xff1a;面向连接&#xff08;三次握手 …...