{"id":13647180,"url":"https://github.com/Backblaze/JavaReedSolomon","last_synced_at":"2025-04-22T02:30:42.093Z","repository":{"id":29792331,"uuid":"33336557","full_name":"Backblaze/JavaReedSolomon","owner":"Backblaze","description":"Backblaze Reed-Solomon Implementation in Java","archived":false,"fork":false,"pushed_at":"2023-09-02T17:44:29.000Z","size":137,"stargazers_count":743,"open_issues_count":9,"forks_count":153,"subscribers_count":35,"default_branch":"master","last_synced_at":"2024-08-02T01:27:04.837Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://www.backblaze.com/open-source-reed-solomon.html","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Backblaze.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2015-04-02T23:19:33.000Z","updated_at":"2024-07-27T21:10:44.000Z","dependencies_parsed_at":"2022-07-07T23:13:08.060Z","dependency_job_id":"f2356ba2-8256-48e0-b554-ae492055f806","html_url":"https://github.com/Backblaze/JavaReedSolomon","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Backblaze%2FJavaReedSolomon","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Backblaze%2FJavaReedSolomon/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Backblaze%2FJavaReedSolomon/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Backblaze%2FJavaReedSolomon/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Backblaze","download_url":"https://codeload.github.com/Backblaze/JavaReedSolomon/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":223887433,"owners_count":17219927,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-08-02T01:03:22.934Z","updated_at":"2025-04-22T02:30:42.083Z","avatar_url":"https://github.com/Backblaze.png","language":"Java","funding_links":[],"categories":["Java"],"sub_categories":[],"readme":"# JavaReedSolomon\n\nThis is a simple and efficient Reed-Solomon implementation in Java,\nwhich was originally built at [Backblaze](https://www.backblaze.com).\nThere is an overview of how the algorithm works in my [blog\npost](https://www.backblaze.com/blog/reed-solomon/).\n\nThe ReedSolomon class does the encoding and decoding, and is supported\nby Matrix, which does matrix arithmetic, and Galois, which is a finite\nfield over 8-bit values.\n\nFor examples of how to use ReedSolomon, take a look at SampleEncoder\nand SampleDecoder.  They show, in a very simple way, how to break a\nfile into shards and encode parity, and then how to take a subset of\nthe shards and reconstruct the original file.\n\nThere is a Gradle build file to make a jar and run the tests.  Running\nit is simple.  Just type: `gradle build`\n\nWe would like to send out a special thanks to James Plank at the\nUniversity of Tennessee at Knoxville for his useful papers on erasure\ncoding.  If you'd like an intro into how it all works, take a look at\n[this introductory paper](http://web.eecs.utk.edu/~plank/plank/papers/SPE-9-97.html).\n\n## Performance Notes\n\nThe performance of the inner loop depends on the specific processor\nyou're running on.  There are twelve different permutations of the\nloop in this library, and the ReedSolomonBenchmark class will tell\nyou which one is faster for your particular application.  The number\nof parity and data shards in the benchmark, as well as the buffer\nsizes, match the usage at Backblaze.  You can set the parameters of\nthe benchmark to match your specific use before choosing a loop\nimplementation. \n\nThese are the speeds I got running the benchmark on a Backblaze\nstorage pod:\n\n```\n    ByteInputOutputExpCodingLoop         95.2 MB/s\n    ByteInputOutputTableCodingLoop      107.0 MB/s\n    ByteOutputInputExpCodingLoop        130.3 MB/s\n    ByteOutputInputTableCodingLoop      181.4 MB/s\n    InputByteOutputExpCodingLoop         94.4 MB/s\n    InputByteOutputTableCodingLoop      138.3 MB/s\n    InputOutputByteExpCodingLoop        200.4 MB/s\n    InputOutputByteTableCodingLoop      525.7 MB/s\n    OutputByteInputExpCodingLoop        143.7 MB/s\n    OutputByteInputTableCodingLoop      209.5 MB/s\n    OutputInputByteExpCodingLoop        217.6 MB/s\n    OutputInputByteTableCodingLoop      515.7 MB/s\n```\n\n![Bar Chart of Benchmark Results](notes/benchmark_on_storage_pod.png)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FBackblaze%2FJavaReedSolomon","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FBackblaze%2FJavaReedSolomon","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FBackblaze%2FJavaReedSolomon/lists"}