(每日持续更新)jdk api之StringBufferInputStream基础、应用、实战

博主18年的互联网软件开发经验,从一名程序员小白逐步成为了一名架构师,我想通过平台将经验分享给大家,因此博主每天会在各个大牛网站点赞量超高的博客等寻找该技术栈的资料结合自己的经验,晚上进行用心精简、整理、总结、定稿,每天都会整理到12点,为了就是能让大家能够真正了解该技术栈的真正原理,最终从程序员成为一名真正的架构师,写的不一定是全站做好的,但是是全站最用心的~。

以后我会推出一些列的文章,每天都会更新,每天进步一点点,发布顺序【java的api基础、应用、实战】->【java开源技术栈及源码分析】->【java开源技术栈整合】->【java低代码开发平台的建设】

关注【架构师成长之道】 输入“java基础课程”,即可免费获得全套架构师全套课程

1.71 StringBufferInputStream

基本概念

StringBufferInputStream 类用于从字符串中读取字节流。它是 InputStream 的子类,可以将字符串转换为字节输入流,以便于从内存中的字符串中读取数据。然而,需要注意的是,StringBufferInputStream 在 Java 11 中已被废弃,建议使用 ByteArrayInputStreamStringReader 来替代。以下是关于 StringBufferInputStream 的介绍、属性、构造方法、方法以及一个简单的例子:

介绍:

  • StringBufferInputStream 允许从内存中的字符串中读取字节,它实现了将字符串转换为字节输入流的功能。

属性:

构造方法:

  • StringBufferInputStream(String s):使用指定的字符串创建一个新的 StringBufferInputStream 对象。

方法:

  • int read():从输入流中读取下一个字节数据,返回读取的字节数据(0 到 255 的范围),如果已到达流的末尾,则返回 -1。

  • int read(byte[] b, int off, int len):从输入流中读取最多 len 个字节的数据到数组 b 中,从偏移量 off 开始存储读取的数据,返回实际读取的字节数。如果已到达流的末尾,则返回 -1。

简单的例子:

以下是一个简单的例子,演示了如何使用 StringBufferInputStream 将字符串转换为字节输入流,并从中读取数据:

javaCopy code
import java.io.*;
​
public class StringBufferInputStreamExample {public static void main(String[] args) {String text = "Hello, World!";StringBufferInputStream stream = new StringBufferInputStream(text);
​int data;while ((data = stream.read()) != -1) {System.out.print((char) data);}
​stream.close();}
}

在这个例子中,我们创建了一个 StringBufferInputStream 对象,将字符串 "Hello, World!" 转换为字节输入流。然后,我们使用 read() 方法从输入流中逐个读取字节,并将其转换为字符输出。最后,我们关闭了输入流。

应用场景

尽管 StringBufferInputStream 在Java 11中已被废弃,但它仍然可以用于某些特定的场景。以下是一些可能的应用场景及其对应的代码实现:

  1. 简单的字符串数据读取: 如果你有一个简单的字符串数据,并且需要以字节流的形式进行读取,可以使用 StringBufferInputStream

javaCopy code
import java.io.*;
​
public class SimpleStringDataReading {public static void main(String[] args) {String data = "This is some simple string data.";try {StringBufferInputStream inputStream = new StringBufferInputStream(data);int byteData;while ((byteData = inputStream.read()) != -1) {System.out.print((char) byteData);}inputStream.close();} catch (IOException e) {e.printStackTrace();}}
}

2.在测试中模拟输入流: 在单元测试中,有时你需要模拟一个输入流以便测试某些方法。在这种情况下,StringBufferInputStream 可能会派上用场。

javaCopy code
import java.io.*;
​
public class InputStreamSimulation {public static void main(String[] args) {// 在测试中模拟一个输入流String testData = "Testing data";InputStream inputStream = new StringBufferInputStream(testData);
​// 在这里可以使用模拟的输入流进行测试}
}

3.与旧代码的兼容性: 在维护旧代码时,可能会遇到使用 StringBufferInputStream 的情况。虽然不推荐在新代码中使用它,但为了保持与旧代码的兼容性,你可能需要继续使用它。

javaCopy code
import java.io.*;
​
public class CompatibilityWithLegacyCode {public static void main(String[] args) {// 与旧代码的兼容性String legacyData = "Legacy data";InputStream legacyInputStream = new StringBufferInputStream(legacyData);
​// 在这里可以继续使用旧代码中的输入流}
}

在这些示例中,我们展示了一些可能的应用场景,包括简单的字符串数据读取、在测试中模拟输入流以及与旧代码的兼容性。尽管 StringBufferInputStream 已被废弃,但在某些情况下仍然可以使用。然而,在新的代码中,建议使用更现代的替代方案,如 ByteArrayInputStreamStringReader

实战例子

以下是一个项目实战示例,展示了如何使用 StringBufferInputStreamDataInputStream 来解析一个简单的二进制数据文件,并将其转换为 Java 对象。在这个示例中,我们将使用 StringBufferInputStream 从字符串中读取二进制数据,并使用 DataInputStream 对其进行解析和处理。

假设我们有一个二进制数据文件,包含了一系列学生的信息,每个学生有姓名和年龄。数据文件的格式如下:

cssCopy code
[姓名长度(字节)][姓名][年龄]

例如,"Alice" 是一个长度为 5 字节的字符串,其后紧跟着一个字节,表示她的年龄。我们将从这个数据文件中读取学生的信息,并将其转换为 Java 对象。以下是实现这个功能的代码示例:

javaCopy code
import java.io.*;
​
public class StudentDataReader {public static void main(String[] args) {try {String binaryData = "5Alice20Bob";StringBufferInputStream stringStream = new StringBufferInputStream(binaryData);DataInputStream dataStream = new DataInputStream(stringStream);
​while (dataStream.available() > 0) {int nameLength = dataStream.readByte(); // 读取姓名长度byte[] nameBytes = new byte[nameLength];dataStream.readFully(nameBytes); // 读取姓名String name = new String(nameBytes);
​int age = dataStream.readInt(); // 读取年龄
​// 创建学生对象并输出信息Student student = new Student(name, age);System.out.println("学生信息:" + student);}
​dataStream.close();} catch (IOException e) {e.printStackTrace();}}
​static class Student {private String name;private int age;
​public Student(String name, int age) {this.name = name;this.age = age;}
​@Overridepublic String toString() {return "姓名:" + name + ", 年龄:" + age;}}
}

在这个示例中,我们首先定义了一个内部类 Student 来表示学生对象。然后,我们创建了一个 StringBufferInputStream 对象来读取二进制数据,该二进制数据被存储在字符串 binaryData 中。接着,我们使用 DataInputStream 对象来读取和解析二进制数据,并将其转换为 Student 对象。最后,我们输出了每个学生对象的信息。

请注意,这只是一个简单的示例,用于演示如何使用 StringBufferInputStreamDataInputStream 来处理二进制数据。在实际应用中,建议使用更稳健和灵活的方法来处理数据,例如使用 ByteBufferObjectInputStream

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

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

相关文章

《Python深度学习》阅读笔记

以下是《Python深度学习》一书中学习过程中记录的一些重要的专属名词和概念: 一、概念 深度学习(Deep Learning):指使用多层神经网络进行机器学习的技术。神经网络(Neural Network):一种模仿生…

『scrapy爬虫』05. 使用管道将数据写入mysql(详细注释步骤)

目录 1. 新建管道类,并启用2. 准备好mysql数据库新建表3. 实现管道写入数据库的代码测试一下 总结 欢迎关注 『scrapy爬虫』 专栏,持续更新中 欢迎关注 『scrapy爬虫』 专栏,持续更新中 如果对mysql和python不熟悉可看专栏【Python之pymysql库学习】 1.…

移动云行动:5.5G技术引领数字化转型

刚刚结束的全国两会上,有人大代表建议应尽快发挥5G-A(5.5G)优势,加快试点城市布局。此前,中国移动已宣布将在300多个城市启动5.5G商用部署。在通信技术的历史长河中,4G改变了我们的生活方式,而5…

华为数通方向HCIP-DataCom H12-821题库(多选题:161-180)

第161题 以下关于IPv6优势的描述,正确的是哪些项? A、底层自身携带安全特性 B、加入了对自动配置地址的支持,能够无状态自动配置地址 C、路由表相比IPv4会更大,寻址更加精确 D、头部格式灵活,具有多个扩展头 【参考答案】ABD 【答案解析】 第162题 在OSPF视图下使用Filt…

强化学习------DDPG算法(附pytorch代码)

目录 一、前言二、基本原理2.1、经验回放2.2、更新过程2.2.1、Critic网络更新过程2.2.2、Actor网络更新过程2.2.3、 目标网络的更新 2.3、噪音探索 三、算法代码实现四、训练示例4.1、实现效果 一、前言 Deep Deterministic Policy Gradient (DDPG)算法是DeepMind团队提出的一…

浅谈性能测试中的基准测试

在性能测试中有一种测试类型叫做基准测试。这篇文章,就聊聊关于基准测试的一些事儿。 1、定义 通过设计合理的测试方法,选用合适的测试工具和被测系统,实现对某个特定目标场景的某项性能指标进行定量的和可对比的测试。 2、特质 ①、可重…

STL——map set

文章将解决一下几个问题: 1.什么是set 2.什么是map 3.set应用场景 4.map应用场景 序列式容器和关联式容器 数据结构有序列式容器和关联式容器,序列式容器一般有vector,list,deque…,但关联式容器中就有map,关联式容器也是用来存…

java基础-异常、常用类

异常 Exception 如果程序员认为一段代码可能出现异常/问题,try-catch异常处理机制来解决,从而保证程序的健壮性。将该代码块–》选中–》快捷键 ctrlaltt–》选中 try-catch 常见的一些异常~ 异常体系图,体现了继承和实现关系。&#xff08…

【中等】保研/考研408机试-二叉树相关

目录 一、基本二叉树 1.1结构 1.2前序遍历(注意三种遍历中Visit所在的位置) 1.2中序遍历 1.3后序遍历 二、真题实战 2.1KY11 二叉树遍历(清华大学复试上机题)【较难】 2.2KY212 二叉树遍历二叉树遍历(华中科技大…

[蓝桥杯练习题]确定字符串是否包含唯一字符/确定字符串是否是另一个的排列

确定字符串是否包含唯一字符 #include<bits/stdc.h> using namespace std; int main(){ios::sync_with_stdio(0);cin.tie(nullptr);cout.tie(nullptr);map<char,int>m;string s;cin>>s;for(int i0;i<s.size();i){if(isalpha(s[i]))s[i]tolower(s[i]);if(…

电机参数辨识算法(2)——基于高频注入的磁链辨识策略

电机参数辨识算法&#xff08;1&#xff09;——基于高频注入的电感辨识策略-CSDN博客https://blog.csdn.net/m0_46903653/article/details/136722750?spm1001.2014.3001.5501上一期已经讲过了电感辨识方法。 今天这是参数辨识的第二期&#xff0c;今天来简单看看磁链的辨识。…

torch.nn.Conv2d()与slim.conv2d()函数参数详解

目录 1. tf.nn.conv2d()函数1.1 input&#xff1a;1.2 filter&#xff1a;1.3 strides&#xff1a;1.4 padding&#xff1a; 2.tf.contrib.slim.conv2d()函数3. torch.nn.Conv2d()函数3.1 官方例子&#xff1a; 1. tf.nn.conv2d()函数 tensorflow构建网络模型时常用的卷积函数…