java InputStream抽象类介绍

java.io.InputStream 是 Java 输入输出(I/O)类库中的一个抽象类,它是所有字节输入流类的超类。输入流用于读取数据(通常是从文件、网络连接或其他数据源),读取的内容为字节数据。下面是对 InputStream 类的详细介绍。

InputStream 类概述

InputStream 是一个抽象类,定义了字节输入流的基本方法。它的子类实现了具体的数据读取逻辑,比如从文件、网络、字节数组等读取数据。

主要方法

InputStream 类提供了一些基本的方法供子类实现和调用。以下是一些常用的方法:

int read()
public abstract int read() throws IOException;

读取单个字节,返回读取的字节(0-255 范围内的整数),如果到达流的末尾,则返回 -1。

int read(byte[] b)

读取一定数量的字节,并将它们存储到字节数组 b 中。返回读取的字节数,如果到达流的末尾则返回 -1。

public int read(byte[] b) throws IOException;
int read(byte[] b, int off, int len)

读取最多 len 个字节,并将它们存储到字节数组 b 中,从偏移量 off 开始。返回读取的字节数,如果到达流的末尾则返回 -1。

public int read(byte[] b, int off, int len) throws IOException;
long skip(long n)

跳过和丢弃输入流中的 n 个字节。

public long skip(long n) throws IOException;
int available()

返回可以不受阻塞地从该输入流读取(或跳过)的剩余字节数。

public int available() throws IOException;
void close()

关闭输入流并释放与该流关联的所有系统资源。

public void close() throws IOException;
void mark(int readlimit)

标记当前流中的位置,以便稍后使用 reset() 方法重新定位到该位置。

public synchronized void mark(int readlimit);
void reset()

将流重新定位到最后一次调用 mark() 方法时的位置。

public synchronized void reset() throws IOException;
boolean markSupported()

测试输入流是否支持 mark 和 reset 方法。

public boolean markSupported();

常用子类

以下是 InputStream 类的常见子类:

FileInputStream 用于读取文件的输入流。
FileInputStream fileInputStream = new FileInputStream("file.txt");
ByteArrayInputStream 用于读取字节数组的输入流。
ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(byteArray);
DataInputStream 允许应用程序以机器无关方式从基础输入流中读取基本 Java 数据类型。
DataInputStream dataInputStream = new DataInputStream(new FileInputStream("file.txt"));
ObjectInputStream 用于反序列化从流中读取的 Java 对象。
ObjectInputStream objectInputStream = new ObjectInputStream(new FileInputStream("file.txt"));
PipedInputStream 实现了管道输入流,用于在不同线程之间通信。
PipedInputStream pipedInputStream = new PipedInputStream();
BufferedInputStream 提供了缓冲功能的输入流,通常用于提高读取效率。
BufferedInputStream bufferedInputStream = new BufferedInputStream(new FileInputStream("file.txt"));

​​​​​​​

示例代码

以下是一个简单的示例代码,演示如何使用 FileInputStream 读取文件:

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;public class InputStreamExample {public static void main(String[] args) {InputStream inputStream = null;try {inputStream = new FileInputStream("example.txt");int data;while ((data = inputStream.read()) != -1) {System.out.print((char) data);}} catch (IOException e) {e.printStackTrace();} finally {if (inputStream != null) {try {inputStream.close();} catch (IOException e) {e.printStackTrace();}}}}
}

在上述示例中,FileInputStream 被用来读取文件 example.txt,并将读取的字节逐个打印到控制台。

总结

InputStream 是 Java I/O 类库中的一个重要抽象类,它定义了读取字节数据的基本操作。通过继承 InputStream类并实现其抽象方法,可以处理多种不同类型的数据源。HTSJDK库中的设计思路也是通过类似的抽象类和接口,实现对多种数据格式的支持。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

UE4-初见虚幻引擎

一.创建自己的工程 1.启动 a.通过桌面双击图标来打开对应版本的虚幻引擎 b.通过EPIC启动器开启动虚幻引擎 2.选择或新建项目 ps:高版本虚幻编辑器可以打开低版本的虚幻项目,但是高版本虚幻的项目不可以由低版本的虚幻编辑器打开。 3. 选择要打开的项目 4.选择模版 选…

Github2.1万星!开发者的“瑞士军刀” 开源!

转载自:GitHub好项目 DevToys 是一个专为开发者设计的实用工具集,它集合了多种开发中常用的功能,如JSON格式化、文本比较、正则表达式测试等,旨在帮助开发者提高编程效率。 镜像代码: http://www.gitpp.com/fm/devt…

Kotlin标准函数(语法糖)let with run also apply快速讲解

目录 1、知识储备——扩展函数 原理 定义扩展函数 调用扩展函数 2、返回值为上下文对象的标准函数 apply also 3、返回值为Lambda表达式结果 let run with 4、一表总结 1、知识储备——扩展函数 原理 Kotlin 在不继承父类或实现接口下,也能扩展一个类的…

第4章 Express路由的深入理解(一)

在本章中,我们将深入探讨 Express 的路由机制,包括参数化路由、嵌套路由、路由前缀、路由分组和路由的高级用法。通过这些知识,读者将能够构建复杂的路由系统,以便处理各种类型的 HTTP 请求。 1 参数化路由 参数化路由允许你在 …

PHP中的函数与调用:深入解析与应用

目录 一、函数基础 1.1 函数的概念 1.2 函数的定义 1.3 函数的调用 二、PHP函数的分类 2.1 内置函数 2.2 用户自定义函数 2.3 匿名函数 2.4 递归函数 2.5 回调函数 2.6 魔术方法 三、函数的参数与返回值 3.1 参数传递 3.2 返回值 四、函数的高级特性 4.1 可变函…

Go语言 字符串和数组

本文主要内容为Go语言数据类型中字符串和数组定义、特性及使用示例。 目录 字符串(String) 定义 长度及访问 拼接 strings 包 判断前缀 查找 转为大写 转为小写 数组(定长) 定义 遍历 方式一 方式二 忽略值 总结 …

川大智胜果然开盘涨停,这就是A股的尿性!

昨天特朗普被刺杀未遂,提前赢得了大选。今天A股的川大智胜(002253)开盘即涨停,毫无悬念。 不要觉得奇怪,这就是缅A一直以来的尿性!什么炒龙凤,炒麻将,炒数字,炒AI,炒美国大选&#…

ROM修改进阶教程------深度解析小米设备锁机型不解锁bl 刷写特殊类固件的步骤

在玩机过程中会遇到很多自己机型忘记密码或者手机号不用导致机型出现账号锁。无法正常使用。那么此类机型如果无法正常售后解锁。只能通过第三方渠道。例如在早期小米机型有强解bl锁资源。然后刷入完美解锁包。这种可以登陆新账号。但后期新机型只能通过修改分区来屏蔽原设备锁…

【SpringBoot】95、SpringBoot中使用MyBatis-Plus实现自动加密存储和查询自动解密

有的业务需要将敏感数据加密存储到 DB,如果我们每个都手动去加密,再设值,再保存 DB,不仅麻烦,还对开发者不友好,在 MyBatis-Plus 中我们可以使用 BaseTypeHandler 来解决这个问题 1、新增 TypeHandler import com.baomidou.mybatisplus.core.toolkit.AES; import com.b…

ctf中php常见内容(比较、变量覆盖)

php比较 1.字符串和数字 PHP的字符串和数字比较时,会将字符串先转化成数字类型在进行比较。 字符串以数字开头时,以开头数字(到字母出现截止)作为转换结果;若开头不是数字的字符串或空(null)…

CORDIC Translate

随便记录一下下: Cordic IP核使用说明以及避坑记录-CSDN博客 本次只用到了Translate,记录一下自己遇到的坑坑 实际配置: timescale 1ns / 1nsmodule cordic_tb();reg clk;wire m_axis_dout_tvalid;reg s_axis_cartesian_tvalid 0;wire [31…

快速上手electron

官方文档: https://www.electronjs.org/zh/docs/latest/ 搭建项目 新建文件夹并初始化项目 mkdir my-electron-app && cd my-electron-app npm init -y注意:新生成的package.json的author(作者)和description(描述)字段要填写补全,不然后期打包会打不了 将package.…

使用Redis实现签到功能:Java示例解析

使用Redis实现签到功能:Java示例解析 在本博客中,我们将讨论一个使用Redis实现的签到功能的Java示例。该示例包括两个主要方法:sign()和signCount(),分别用于用户签到和计算用户当月的签到次数。 1. 签到方法:sign()…

【DRAM存储器三十四】LPDDR4介绍--MR和IO结构

👉个人主页:highman110 👉作者简介:一名硬件工程师,持续学习,不断记录,保持思考,输出干货内容 参考资料:《镁光LPDDR4数据手册》 、《JESD209-4B》 目录 MR DDR3、DDR4、LPDDR4的IO结构变化 MR LPDDR4的MR包括保留未用的有64个,这个就不像以前一…

前端 JS 经典:二维数组转一维数组去重

前言:将数组[[1, 2], [2, 3], [1, 4]] 转为一维数组,且去重 1. 使用 Array.prototype.flat() 和 Set const twoDArray [[1, 2],[2, 3],[1, 4],];const oneDArray Array.from(new Set(twoDArray.flat()));console.log(oneDArray); // [1, 2, 3, 4] 2…

CUTLASS

文章目录 1、关于 CUTLASS2、CUTLASS 3.5中的新增功能3、性能4、兼容性4、操作系统5、硬件6、目标架构7、文档8、资源9、构建 CUTLASS10、项目结构11、CUTLASS模板库CUTLASS SDK示例工具测试 12、性能分析13、构建所有GEMM和卷积内核(构建时间长)14、构建…

银河麒麟高级服务器操作系统V10加固操作指南

1:检查系统openssh安全配置: 2:检查是否设置口令过期前警告天数: 3:检查账户认证失败次数限制: 修改/etc/pam.d/system-auth文件中deny的参数即可 4:检查是否配置SSH方式账户认证失败次数限制:

StarRocks部署高可用 FE 集群

一、准备工作 1.1 部署规划 这里我打算部署存算一体模式,三节点。即三个FE节点,三个BE节点。假设三台IP分别为:10.10.10.50、10.10.10.51、10.10.10.52 我将采用三台centos7.9进行部署,单台配置为128C 256G 3T。 1.2 服务器检查…

拓展神经网络八股(入门级)

自制数据集 minst等数据集是别人打包好的,如果是本领域的数据集。自制数据集。 替换 把图片路径和标签文件输入到函数里,并返回输入特征和标签 要生成.npy格式的数据集,在进行读入训练集。 只需要把图片灰度值数据拼接到特征列表&#xff0…

进程间通信(下)

system V共享内存 共享内存区是最快的IPC形式。一旦这样的内存映射到共享它的进程的地址空间,这些进程间数据传递不再涉及到内核,换句话说是进程不再通过执行进入内核的系统调用来传递彼此的数据 共享内存示意图 通过上面的图,我们不难想到…