字节输入流

简介: 字节输入流

字节输入流(InputStream)用于从外部源(如文件、网络等)读取数据。它是一个抽象类,具体的实现类包括文件输入流(FileInputStream)、字节数组输入流(ByteArrayInputStream)等。

  1. read():从输入流中读取下一个字节的数据并返回。
InputStream inputStream = new FileInputStream("example.txt");
int data = inputStream.read(); // 读取单个字节数据
while (data != -1) {
    System.out.print((char) data); // 输出读取到的字节转换为字符
    data = inputStream.read(); // 继续读取下一个字节数据
}
inputStream.close(); // 关闭输入流
  1. read(byte[] b):从输入流中将数据读入到字节数组中,并返回读取的字节数。
InputStream inputStream = new FileInputStream("example.txt");
byte[] data = new byte[1024]; // 缓冲区大小
int bytesRead = inputStream.read(data); // 读取字节数组数据
while (bytesRead != -1) {
    // 处理读取到的数据
    System.out.write(data, 0, bytesRead); // 将字节数组数据输出到控制台
    bytesRead = inputStream.read(data); // 继续读取字节数组数据
}
inputStream.close(); // 关闭输入流
  1. available():获取输入流中可读取的字节数。
InputStream inputStream = new FileInputStream("example.txt");
int availableBytes = inputStream.available(); // 获取可读取的字节数
byte[] data = new byte[availableBytes];
inputStream.read(data); // 读取可用字节数组数据
inputStream.close(); // 关闭输入流
  1. skip(long n):跳过输入流中的 n 个字节的数据。
InputStream inputStream = new FileInputStream("example.txt");
inputStream.skip(5); // 跳过前5个字节数据
int data = inputStream.read(); // 读取跳过后的下一个字节
inputStream.close(); // 关闭输入流

当使用字节输入流(InputStream)时,有一些细节需要注意:

  1. 读取的数据类型: 字节输入流以字节为单位进行读取,读取的数据类型是int。即使实际上我们可能只需要读取字符数据,仍然会返回一个int值,表示读取到的字节。如果需要将其转换为字符,可以使用(char)进行强制类型转换
  2. 读取结束的标识: 当读取到达文件末尾时,read()方法将返回-1,表示没有更多的字节可读。
  3. 缓冲区: 在使用read(byte[] b)方法读取数据时,通常会创建一个字节数组作为缓冲区。缓冲区的大小可以根据需要进行调整。较大的缓冲区可以提高读取效率,但也会占用更多的内存空间。
  4. 输入流关闭: 使用完毕后,必须显式地调用close()方法来关闭输入流,释放相应的资源。关闭输入流是一个良好的编程习惯,可以避免资源泄漏和占用过多的系统资源。
  5. 异常处理: 在使用字节输入流时,可能会抛出IOException及其子类的异常。对于这些异常,建议使用try-catch语句进行捕获和处理,以确保程序的健壮性。

 


相关文章
|
8月前
|
机器学习/深度学习 人工智能 安全
论文推荐:CoSTAast、Transformers without Normalization
由马里兰大学团队提出的CoSTA*,针对多轮图像编辑任务设计了一种成本敏感的工具路径代理。该工作结合大语言模型(LLM)的子任务规划与A搜索算法,构建了一个高效的工具选择路径,不仅降低了计算成本,还提升了图像编辑质量。通过视觉语言模型评估子任务输出,CoSTA能在失败时快速调整路径,并在全新多轮图像编辑基准测试中超越现有最佳模型。
199 0
|
资源调度 前端开发 安全
前端实战:基于Verdaccio搭建私有npm仓库,轻松上传与下载自定义npm插件包
前端实战:基于Verdaccio搭建私有npm仓库,轻松上传与下载自定义npm插件包
960 0
|
存储 JSON API
【Elasticsearch专栏 16】深入探索:Elasticsearch的Master选举机制及其影响因素分析
Elasticsearch,开源搜索和分析引擎,以其分布式特性受开发者喜爱。本文聚焦其Master选举过程,关键在于保障集群稳健和高可用。Master负责集群操作,数据节点存储数据。选举在Master不可用时发生,基于Zen Discovery模块,遵循多数派协议。选举过程包括启动发现、选举触发、节点投票和状态同步。相关命令和配置有助于管理选举和集群状态。理解和优化选举机制能提升Elasticsearch集群的性能和稳定性。
310 1
|
机器学习/深度学习 数据采集 SQL
【Python机器学习专栏】使用Pandas处理机器学习数据集
【4月更文挑战第30天】本文介绍了如何使用Python的Pandas库处理机器学习数据集,涵盖数据读取、概览、清洗、转换、切分和保存等步骤。通过Pandas,可以从CSV等格式加载数据,进行缺失值、异常值处理,数据类型转换,如归一化、类别编码,并实现训练集与测试集的划分。此外,还展示了如何保存处理后的数据,强调了Pandas在数据预处理中的重要性。
645 0
|
Docker 容器
搭建自己的Docker Harbor镜像仓库(1)--- 安装篇
搭建自己的Docker Harbor镜像仓库(1)--- 安装篇
313 1
|
域名解析 安全
国际阿里云香港免备案轻量服务器优势!!!
阿里云是国内的知名品牌云服务商,有丰富的产品线和强大的技术支持,深受用户的青睐。小编将在本文中给大家说说阿里云香港服务器,一起来看看有何优势吧?
国际阿里云香港免备案轻量服务器优势!!!
|
存储 Ubuntu 安全
搭建 Jupyter Notebook 服务
搭建 Jupyter Notebook 服务
1734 1
|
存储 Java 应用服务中间件
jvm内存模型
jvm内存模型
231 0
Java-验证码图片生成器
Java-验证码图片生成器
1113 0
|
机器学习/深度学习 算法 Java
一个Java程序员的阿里之路
前言 最近有些朋友在面试阿里,加上 Java-Interview 项目的原因也有小伙伴和我讨论,近期也在负责部门的招牌,这让我想起年初那段长达三个月的奇葩面试经历。 本来没想拿出来说的,毕竟最后也没成。
1918 0

热门文章

最新文章