Same as Paper? Phospho Ab Reads Whqt/
Paper
Paper's aim is to provide a uncomplicated yet fast object storage option for Android. It allows to apply Java/Kotlin classes as is: without annotations, factory methods, mandatory class extensions etc. Moreover adding or removing fields to information classes is no longer a pain – all data structure changes are handled automatically.
Migration to Maven Central
Library has been moved to Maven Central since service ends for JCenter. Notation that group id has been changed to io.github.pilgr
. See the updated section below.
Add together dependency
implementation 'io.github.pilgr:paperdb:2.7.ii'
RxJava wrapper for Newspaper is available equally a separate lib RxPaper2. Thanks @pakoito for it!
Initialize Newspaper
Should be initialized once in Awarding.onCreate()
:
Threading
-
Paper.init()
should be called in UI thread; - All other APIs (
write
,read
etc.) are thread-safe and manifestly must be called outside of UI thread. Reading/writing for differentcardinal
s tin be done in parallel.
Salvage
Salve any object, Map, List, HashMap etc. including all internal objects. Use your existing data classes equally is. Note that key is used as file name to store the information so cannot contain symbols similar /
.
Listing<Person> contacts = ... Paper .book().write( "contacts" , contacts);
Read
Read data objects is every bit piece of cake as
List<Person> = Paper .book().read( "contacts" );
the instantiated grade is exactly the 1 used to save information. Limited changes to the class structure are handled automatically. Meet Handle information grade changes.
Use default values if object doesn't exist in the storage.
List<Person> = Newspaper .book().read( "contacts" , new ArrayList<>());
Delete
Delete information for i cardinal.
Newspaper .book().delete( "contacts" );
Remove all keys for the given Book. Paper.init()
must be called prior calling destroy()
.
Apply custom book
You can create custom Book with separate storage using
Paper .book( "for-user-1" ).write( "contacts" , contacts); Paper .book( "for-user-2" ).write( "contacts" , contacts);
Each book is located in a split up file folder.
Get all keys
Returns all keys for objects in the book.
List<String> allKeys = Paper .book().getAllKeys();
Handle data structure changes
You tin add or remove fields to the course. Then on next read endeavor of a new class:
- Newly added fields will take their default values.
- Removed field volition be ignored.
Note: field type changes are not supported.
For example, if y'all take following data class saved in Paper storage:
class Volcano { public String proper noun; public boolean isActive; }
And and then you realized you demand to modify the class like:
class Volcano { public String name; // public boolean isActive; removed field public Location location; // New field }
the isActive field will be ignored on adjacent read and new location field will have its default value as nada.
Exclude fields
Use transient keyword for fields which yous want to exclude from saving process.
public transient String tempId = "default" ; // Won't exist saved
Set storage location for Book instances
By default, all the Paper data files are located with all files belonging to your app, at ../you-app-package-name/files
. To salve data on SDCard or at whatever other location y'all can use new API:
-
Paper.bookOn("/path/to/the/new/location")
- or
Paper.bookOn("path/to/the/new/location", "book-for-user-1")
to create custom volume.
Export/Import
- Use
Paper.volume().getPath()
to go path for a binder containing all *.pt files for a given book. - Use
Paper.book().getPath(key)
to become path for a particular *.pt file containing saved object for a given key. Experience gratuitous to copy/rewrite those files for export/import purposes. It's your responsibility to finalize file's export/import operations prior accessing data over Paper API.
Proguard config
- Keep your data classes from modification by Proguard:
-keep class your.app.data.model.** { *; }
as well yous can implement Serializable for all your data classes and go on all of them using:
-keep grade * implements java.io.Serializable { *; }
How information technology works
Newspaper is based on the post-obit assumptions:
- Datasets on mobile devices are small and usually don't have relations in between;
- Random file access on wink storage is very fast;
Newspaper saves each object for given central in a separate file and every write/read operations write/read the whole file.
The Kryo is used for object graph serialization and to provide data compatibility support.
Benchmark results
Running Criterion on Nexus iv, in ms:
Benchmark | Paper | Militarist |
---|---|---|
Read/write 500 contacts | 187 | 447 |
Write 500 contacts | 108 | 221 |
Read 500 contacts | 79 | 155 |
Limitations
- Circular references are not supported
Apps using Paper
- AppDialer – Newspaper initially has been developed as internal lib to reduce start up time for AppDialer. Currently AppDialer has the best kickoff up fourth dimension in its class. And unproblematic no-sql-pain data storage layer similar a bonus.
- Busmap - This awarding provide all things yous demand for travelling by bus in Ho Chi Minh city, Vietnam. While the source code is not opened, information technology is constitute that the application use Paper internally to manange the charabanc stop data, route information, time information,... and more.
License
Copyright 2015 Aleksey Masny Licensed under the Apache License, Version two.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://world wide web.apache.org/licenses/LICENSE-2.0 Unless required by applicable constabulary or agreed to in writing, software distributed under the License is distributed on an "Every bit IS" Ground, WITHOUT WARRANTIES OR Conditions OF ANY KIND, either limited or implied. See the License for the specific language governing permissions and limitations under the License.
blossevillecoutiek.blogspot.com
Source: https://github.com/pilgr/Paper