过滤(搜索和替换)InputStream 中的字节数组

2024-05-06

我有一个 InputStream ,它将 html 文件作为输入参数。我必须从输入流中获取字节。

我有一个字符串:"XYZ"。我想将此字符串转换为字节格式,并检查从 InputStream 获得的字节序列中是否存在与该字符串匹配的字符串。如果有的话,我必须将匹配替换为其他字符串的再见序列。

有谁可以帮助我解决这个问题吗?我使用正则表达式来查找和替换。但是查找和替换字节流,我不知道。

以前,我使用 jsoup 来解析 html 并替换字符串,但是由于一些 utf 编码问题,当我这样做时,文件似乎已损坏。

TL;DR:我的问题是:

有一种方法可以在Java中的原始InputStream中查找和替换字节格式的字符串吗?


不确定您是否选择了解决问题的最佳方法。

也就是说,我不喜欢(并且按照政策不)用“不”回答问题,所以这里......

看一下FilterInputStream http://download.oracle.com/javase/6/docs/api/java/io/FilterInputStream.html.

从文档中:

FilterInputStream 包含一些其他输入流,它用作基本数据源,可能会一路转换数据或提供附加功能。


写下来是一个有趣的练习。这是一个完整的示例:

import java.io.*;
import java.util.*;

class ReplacingInputStream extends FilterInputStream {

    LinkedList<Integer> inQueue = new LinkedList<Integer>();
    LinkedList<Integer> outQueue = new LinkedList<Integer>();
    final byte[] search, replacement;

    protected ReplacingInputStream(InputStream in,
                                   byte[] search,
                                   byte[] replacement) {
        super(in);
        this.search = search;
        this.replacement = replacement;
    }

    private boolean isMatchFound() {
        Iterator<Integer> inIter = inQueue.iterator();
        for (int i = 0; i < search.length; i++)
            if (!inIter.hasNext() || search[i] != inIter.next())
                return false;
        return true;
    }

    private void readAhead() throws IOException {
        // Work up some look-ahead.
        while (inQueue.size() < search.length) {
            int next = super.read();
            inQueue.offer(next);
            if (next == -1)
                break;
        }
    }

    @Override
    public int read() throws IOException {    
        // Next byte already determined.
        if (outQueue.isEmpty()) {
            readAhead();

            if (isMatchFound()) {
                for (int i = 0; i < search.length; i++)
                    inQueue.remove();

                for (byte b : replacement)
                    outQueue.offer((int) b);
            } else
                outQueue.add(inQueue.remove());
        }

        return outQueue.remove();
    }

    // TODO: Override the other read methods.
}

用法示例

class Test {
    public static void main(String[] args) throws Exception {

        byte[] bytes = "hello xyz world.".getBytes("UTF-8");

        ByteArrayInputStream bis = new ByteArrayInputStream(bytes);

        byte[] search = "xyz".getBytes("UTF-8");
        byte[] replacement = "abc".getBytes("UTF-8");

        InputStream ris = new ReplacingInputStream(bis, search, replacement);

        ByteArrayOutputStream bos = new ByteArrayOutputStream();

        int b;
        while (-1 != (b = ris.read()))
            bos.write(b);

        System.out.println(new String(bos.toByteArray()));

    }
}

给定字符串的字节数"Hello xyz world"它打印:

Hello abc world
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

过滤(搜索和替换)InputStream 中的字节数组 的相关文章

  • 使用 HttpUrlConnection Android 将 base64 编码的图像发送到服务器

    我正在尝试使用 HttpUrlConnection 将 base64 编码的图像发送到服务器 我遇到的问题是大多数图像均已成功发送 但有些图像会生成 FileNotFound 异常 我的图像编码代码可以在下面找到 public static
  • Jackson - 反序列化嵌套 JSON

    我有一个 JSON 字符串 其格式如下 response execution status ready report cache hit true created on 2013 07 29 08 42 42 fact cache erro
  • 防止 Spring Boot 注册 Spring Security 过滤器之一

    我想禁用安全链中的 Spring Security 过滤器之一 我已经看到了防止 Spring Boot 注册 servlet 过滤器 https stackoverflow com questions 28421966 prevent s
  • 如何开始使用 Chainsaw for Log4j?

    我想开始使用 Chainsaw v2 几乎没有关于它的信息 我只找到了this http www velocityreviews com forums t140105 help using chainsaw for log4j html 但
  • 无法使用 json 架构验证器根据预定义的 yaml 文件验证查询参数

    我需要根据预定义的 yaml 文件架构验证查询参数的架构 因此我使用 json 架构验证器 验证如何失败 我正在执行以下步骤 填充参数和相应的架构 final List
  • RMI 中的引用传递问题? [复制]

    这个问题在这里已经有答案了 有人可以告诉我我错在哪里 为什么这个 RMI 聊天应用程序不起作用 目标是通过远程对象或序列化对象实现客户端 服务器和逻辑之间的解耦 import javax swing import java awt even
  • 是否有任何API可以将Microsoft Exchange服务器与Java应用程序集成以进行任务同步?

    我正在尝试将 Java Web 应用程序与 Microsoft Exchange 服务器集成以实现双向日历 即任务 同步 是否有用于此集成的 Java 开源 商业 API 谢谢 文卡特 看一眼j 交易所 http sourceforge n
  • 更改API数据输出的布局

    我是 API 集成和 PHP 的新手 我最近将 VIN 解码器集成到我的应用程序中 在输入框中输入车辆的 VIN 选择提交 然后就会显示 API 数据库中有关该车辆的所有信息 数据存储为关联数组 其中包含类别及其相应元素 例如 对于 VIN
  • 将 Excel 范围转换为 VBA 字符串

    我想将给定范围内的值转换为 VBA 字符串 其中原始单元格值由任何选定的列分隔符和行分隔符分隔 分隔符可以是一个字符或更长的字符串 行分隔符是行末尾的字符串 该字符串应该像我们从左上角 从左到右 到右下角读取文本一样完成 以下是范围 A1
  • JFace ColumnWeigthData 导致父级增长

    我有一个 Eclipse RCP 应用程序 并且想要在TableViewer using ColumnWeigthData as ColumnLayoutData 问题是父表单 ScrolledForm在示例代码中 每当我布局表格时都会增加
  • 容器中的 JVM 计算处理器错误?

    最近我又做了一些研究 偶然发现了这一点 在向 OpenJDK 团队抱怨之前 我想看看是否有其他人观察到这一点 或者不同意我的结论 因此 众所周知 JVM 长期以来忽略了应用于 cgroup 的内存限制 众所周知 现在从 Java 8 更新某
  • Intellij 中的 Google OR-Tools:UnsatisfiedLinkError

    我正在建立一个应该使用 Google OR Tools 的 java 框架 下面的代码编译成功 但在运行时抛出异常 Exception in thread main java lang UnsatisfiedLinkError com go
  • 带有 OpenId 提供程序的 Java Spring 安全性

    我有一个 spring MVC 应用程序 另一个客户端应用程序想要使用 open id connect 访问我的 spring 应用程序 如何在服务器端实现开放ID提供商 请帮忙 MITREid 连接 OpenID Connect Java
  • 如何将 arraylist 从 servlet 传递到 javascript?

    我通过在属性中设置数组列表并将其转发到 jsp 来从 servlet 传递数组列表 Servlet ArrayList
  • 了解 Spark 中的 DAG

    问题是我有以下 DAG 我认为当需要洗牌时 火花将工作划分为不同的阶段 考虑阶段 0 和阶段 1 有些操作不需要洗牌 那么为什么 Spark 将它们分成不同的阶段呢 我认为跨分区的实际数据移动应该发生在第 2 阶段 因为这里我们需要cogr
  • 警告:无法更改每个人的权限:

    当运行 Java 快速入门示例时https developers google com drive web quickstart java hl hu https developers google com drive web quicks
  • 无法使用 wget 在 CentOS 机器上安装 oracle jdk

    我想在CentOS上安装oracle java jdk 8 我无法安装 java jdk 因为当我尝试使用命令安装 java jdk 时 root ADARSH PROD1 wget no cookies no check certific
  • 尝试使用 Javascript 解决对称差异

    我正在尝试找出对称的解决方案 使用 javascript 完成以下任务的差异 目标 接受未指定数量的数组作为参数 保留数组中数字的原始顺序 不删除单个数组中数字的重复项 删除数组中出现的重复项 因此 例如 如果输入是 1 1 2 6 2 3
  • 摩尔斯电码 至 英语

    我现在的问题是让 摩尔斯电码转英语 正常工作 将英语转换为莫尔斯电码的第一部分工作正常 我知道以前已经有人问过这个问题 但我不知道我做错了什么 我知道我需要在某个地方进行拆分 但我只是不确定将其放在代码中的何处 现在 莫尔斯电码到英语的部分
  • 每次我们调用浏览器时,在 selenium 中使用 driver.manage().window().maximize() 是否好?

    We use driver manage window maximize 最大化浏览器 我在网上看到一些使用的例子driver manage window maximize 尽管不需要最大化浏览器 例如 gmail 登录 我还看到使用 se

随机推荐

  • 如何在数据加载期间 IsBusy 为 true 时至少显示一次 Lottie 动画?

    On my Xamarin Forms 项目 我想显示一个洛蒂动画 during API调用或期间加载网站 in a WebView 为此 我限制了IsVisible的财产洛蒂动画 to the IsBusy我的财产视图模型 这个效果很好
  • 为什么x86分页没有特权环的概念?

    早在 1982 年 当 Intel 发布 80286 时 他们在分段方案中添加了 4 个特权级别 环 0 3 由全局描述符表 GDT 和局部描述符表 LDT 中的 2 位指定 在 80386 处理器中 Intel 添加了分页功能 但令人惊讶
  • 如何在另一个 Gui 中启动 JADE Gui?

    如何在另一个 Gui 中启动 JADE Gui 假设我的 Gui 上有一个按钮 点击该按钮后 JADE Gui 将启动 这可能吗 如果是 怎么办 提前致谢 Regards 我假设 JADE Gui 你指的是 JADERMA http jad
  • 窗口位置替换 - 超时帮助? JavaScript问题

    我曾尝试找到一种方法 在我的代码中添加超时 然后再重定向您 我用谷歌搜索并找到了一些帮助 但他们都没有达到我的预期 这会提示用户出生年份并计算年龄 大致 如果用户未满18岁 则带他们去迪士尼乐园 否则允许进入 函数年龄按钮 var AskD
  • 使用 javascript 检测 CSP 违规

    是否可以使用 JavaScript 检测内容安全策略违规 我的 CSP 工作并发送其报告 我看到一些 url 被注入 可能是通过浏览器插件注入的 我想向用户显示一个提示 即某些插件尝试修改页面 我能否以某种方式检测与 javascript
  • 在 swiftUI 中捕获 onLongPressGesture 的 touchDown 位置?

    我正在尝试实现一个自定义上下文菜单 该菜单将在用户触摸的位置长按后出现 我一直无法找到一种方法来捕获 onLongPressGesture 的触地事件的 XY 位置 这就是我开始的地方 struct ExampleView View Sta
  • 从字符串中提取所有链接

    我有一个 javascript 变量 其中包含页面的 HTML 源代码 不是当前页面的源代码 我需要从该变量中提取所有链接 关于什么是最好的方法的任何线索 是否可以为变量中的 HTML 创建一个 DOM 然后遍历它 我不知道这是否是推荐的方
  • 使用 Android 将文本文件上传到 Google Drive

    编辑 我已将文本设置为字符串 如下所示 字符串文本 你好 我想将其转换为纯文本文件 然后上传到 Google 云端硬盘文件夹 我已经尝试过下面的代码 但它不完整 所以我无法说出出现了什么错误 我正在使用 Google Drive 快速启动
  • 在R包/.Rd文件中搜索unicode字符

    如何在 R 包或特定文件中搜索特定的 unicode 字符 我使用的是 RStudio IDE 我正在尝试向 CRAN 提交包裹 所有检查均通过 但以下情况除外 W checking PDF version of manual 49 5s
  • 有没有办法在每个 HTTP 请求的 JSON 响应中重置 $id ? JsonSerializerSettings = PreserveReferencesHandling.Objects

    XYZController cs HttpPost public async Task
  • Clojure:生成所有键盘可输入字符

    Context 我想生成可以通过以下方式生成的所有字符 打开记事本 按键盘上的单个键 按住 Shift 按键盘上的单个键 我目前拥有的 concat range int a int z range int A int Z range int
  • “在 Chrome 网上应用店中注册”未显示在 Google 脚本编辑器中

    我正在尝试将脚本 在脚本库中称为 Paypal 商店 作为 Chrome 网上应用店中的网络应用程序发布 但 Google 脚本的 发布 菜单中未显示 在 Chrome 网上应用店中注册 项目编辑器 此菜单中唯一的项目是 发布到库 和 部署
  • Microsoft ASP.NET Web Pages 2 Data Nuget 包的用途是什么?

    据我了解 ASP NET MVC 4 项目所需的最低 Nuget 包是 微软 ASP NET MVC 4 微软 ASP NET 剃刀 2 微软 ASP NET 网页 2 微软网络基础设施 不过我很想知道 以下包会添加到项目中什么 Micro
  • Ant:如何编写可选的嵌套元素

    说我需要做类似的事情
  • NSDateComponents - EXC_BAD_ACCESS 错误

    我确信有一个简单的答案的基本问题 我正在尝试获取照片的时间戳 当我尝试访问 NSDateComponents 以检索特定日期元素 例如 日 时 我收到 EXC BAD ACCESS 错误 首先 我的代码的相关部分 formattedDate
  • 计算MKPolyline路径的距离?

    我想获取 MKPolyline 路径的米数 以便我可以告诉用户完成路径还剩多少米 我一直在寻找一些东西来做这件事 但我什么也没得到 Thanks 尽管听起来很乏味 但除非您想自己进行数学计算 否则您可能必须迭代该行的思想points 将每个
  • 如何在 Eclipse 中添加视角

    如果我安装了两个版本的 Eclipse 如何将在一个 Eclipse 版本 中安装的透视图添加到另一个版本 首先如何添加视角 即 它们来自哪里 不要告诉我 打开视角 对话框 由于所选答案在 观点从何而来 的细节上有点 差 因此以下是一些精度
  • 已加载 nib 文件但未设置视图出口

    我不小心删除了universityPicker xib 然后用相同的名称创建了一个新的 但无法连接 文件崩溃并给出此消息 reason UIViewController loadViewFromNibNamed bundle loaded
  • 运行时动态转换

    有没有一种方法可以在运行时动态转换 如以下伪代码 foreach DataRow row in table Rows foreach DataColumn col in table Columns if row col DBNull Val
  • 过滤(搜索和替换)InputStream 中的字节数组

    我有一个 InputStream 它将 html 文件作为输入参数 我必须从输入流中获取字节 我有一个字符串 XYZ 我想将此字符串转换为字节格式 并检查从 InputStream 获得的字节序列中是否存在与该字符串匹配的字符串 如果有的话