Java 流操作

标签 java stream iostream

我正在修改一些现有的java代码,当前使用以下过程:

  1. 打开 FileInputStream 以从磁盘读取文件。
  2. 将 FileInputStream 传递到 DataInputStream 的构造函数
  3. 将 DataInputStream 中的数据读入字节数组
  4. 基于字节数组创建 Apache Commons ByteArrayPartSource
  5. 基于 ByteArrayPartSource 创建 Apache Commons FilePart。
  6. 基于 FilePart 创建 Apache Commons MultipartRequestEntity。
  7. 调用需要 MultipartRequestEntity 作为其参数的外部 API。

我正在尝试通过添加代码来扫描输入文件并搜索/替换文本字符串来修改此过程。例如,它可能会扫描文件中的模式“abc”并将其替换为“xyz”。但是,我不确定应该将此修改添加到哪一步。我选择的步骤对性能有影响吗?是否可以在内存中进行搜索/替换而不将输入文件写入临时区域?

谢谢。

最佳答案

如果您正在读取的文件是文本文件,您可以:

  • 使用接受字节数组的字符串构造函数将第 3 步中获得的字节数组转换为字符串
  • 使用 replacereplaceAll 方法对所述字符串进行搜索和替换操作(需要一些正则表达式知识)
  • 使用 getBytes 方法将结果转换回字节数组
  • 从第 4 步继续处理

强烈建议您在字符串构造函数和 getBytes 方法中指定文件编码,以避免难以调试的编码问题。

...如果文件是二进制的...我想不出一种方法来搜索和替换其中的文本,抱歉。

关于Java 流操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15524501/

相关文章:

Java将对象存储在固定大小的集合中

Java 算术异常,如何解决?

java - Spring : Unsatisfied dependency

javascript - 使用 fetch 或 new Request() 创建的请求具有未定义的主体

c++ - 一次从 .txt 文件读取两行 - C++ getline/streams?

c# - 将 iostream 输入代码从 C++ 移植到 C#

C++:如何从 cin 中删除错误的输入?

java - 使用 exe4j 从 .jar 创建 .exe 时如何包含库

c++ - 在 istream 上用 << 读取固定数量的字符

java - Kafka 流应用程序将读取与写入分开