Show HN: Samchika - 用于快速多线程文件处理的 Java 库

Samchika(梵语中意为“文件”)是一个 可重用易于使用极其快速 的 Java 文件处理库。

它非常注重 多线程,可以并行处理 CPU 密集型文件处理任务,即使对于海量文件也能实现高性能。

🚀 特性

用例

在以下情况下,Samchika 在多线程文件处理能提供显著优势的场景中表现出色:

有关这些用例的详细实现,请参见 examples 目录。

快速示例

// Transform a large CSV file with optimal performance
SmartFileProcessor.builder()
  .inputPath("large_dataset.csv")
  .outputPath("transformed_dataset.csv")
  .batchSize(10000)
  .lineProcessor(line -> line.toUpperCase())
  .displayStats(true)
  .build()
  .execute();

📦 安装

Maven

<repositories>
  <repository>
    <id>jitpack.io</id>
    <url>https://jitpack.io</url>
  </repository>
</repositories>
<dependencies>
  <dependency>
    <groupId>com.github.mayankpratap</groupId>
    <artifactId>samchika</artifactId>
    <version>1.0.0</version>
  </dependency>
</dependencies>

Gradle

repositories {
  maven { url 'https://jitpack.io' }
}
dependencies {
  implementation 'com.github.mayankpratap:samchika:1.0.0'
}

🛠️ 如何使用

步骤 1:导入库

import com.samchika.SmartFileProcessor;

步骤 2:客户端代码

public static void main(String[] args) {
  SmartFileProcessor processor = SmartFileProcessor.builder()
    .inputPath("input.txt")     // Path to the file to be processed
    .outputPath("output.txt")    // Path to write the output
    .lineProcessor(Main::processLine) // Your business logic per line
    .displayStats(true)       // Optional: display runtime stats
    .build();
  processor.execute();
}

📈 性能

针对基于朴素 BufferedReader 实现的各种大小的文件进行了基准测试:

✅ 200 MB ✅ 1 GB ✅ 5 GB ✅ 16 GB

观察到显著的性能提升,尤其是在多核系统中(性能提升超过 70%)。

随着输入文件大小的增加,与朴素代码相比,节省的时间增益也随之提高。此外,即使对于大型文件(16GB),内存使用也是可管理的(约 800 MB),从而实现了巨大的性能提升。

Perf visualization

License

该库在 MIT License 下发布,这意味着您可以自由使用、修改和分发它,即使在商业应用中也是如此。我们只要求您在库的任何副本或其大部分内容中包含原始版权声明和许可文本。

💡 灵感

这个项目灵感来源于:

  1. Shubham Maurya ( https://github.com/complex1 ),一位亲爱的朋友,他发布了一个 JavaScript 库——这激发了我用 Java 做类似事情的动力。
  2. 一篇 LinkedIn 帖子讨论了处理大型文本文件的挑战——这让我产生了用优雅的 API 和快速的多线程架构来解决它的想法。

关于

用于 Java 的快速轻量级多线程文件处理库。