# java-dirty **Repository Path**: mirrors/java-dirty ## Basic Information - **Project Name**: java-dirty - **Description**: java-dirty 是一个快速的基于文件的对象存储系统,只能往存储里添加对象,使用内存映射文件技术 - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: https://www.oschina.net/p/java-dirty - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 0 - **Created**: 2020-11-06 - **Last Updated**: 2026-01-17 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # java-dirty [![Build Status](https://travis-ci.org/mrwilson/java-dirty.png?branch=master)](https://travis-ci.org/mrwilson/java-dirty) A fast file-based append-only object store, using memory mapped files. ## Is java-dirty safe to use with multiple concurrent writers? Absolutely not - but it's fast enough that putting it behind e.g. a Disruptor and consuming writes in a single thread should be fine. ## Downloading from Maven ```xml uk.co.probablyfine java-dirty 1.6 ``` ## Usage ### Creating a store. ```java Store store = Store.of(Foo.class).from("/path/to/file"); ``` ### Inserting an object ```java store.put(new Foo(1,2)); ``` ### Iterating over all objects in the store ```java store.all().forEach(System.out::println); ``` ### Iterate over objects, most recent first ```java store.reverse().forEach(System.out::println); ``` ### Iterate over objects from a starting index ```java store.from(100).forEach(System.out::println); ``` ### Access an index directly ```java Optional foo = store.get(1234); ``` ### Reset the entire store ```java store.reset(); // Reset position to 0, overwriting old entries ``` ### Close the store and its backing file ```java store.close(); ``` Trying to read from/write to a closed store will throw a ClosedStoreException. ### Observe each write ```java store.observeWrites((object, index) -> System.out.println("Stored "+object+" at "+index); ); ``` java-dirty does not support replacements, or deletions. Both `.all()` and `.reverse()` expose a Stream. ## Examples ### Look up most recent version of an object by index ```java Optional first = store .reverse() .filter(x -> x.indexField == valueToFind) .findFirst(); ``` ### Build an lookup index using write observers ```java Store store = Store.of(StoredObject.class).from("/some/path"); Map index = new HashMap<>(); store.observeWrites((object, location) -> { index.put(object.indexField, location); }); store.put(new StoredObject(1234,5)); store.get(index.get(1234)); // Optional[StoredObject(1234,5)]; ``` ## Supported Fields java-dirty will only persist primitive fields on objects. All primitive types are currently supported. ### Performance See the README in java-dirty-benchmarks for the latest