Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
40 commits
Select commit Hold shift + click to select a range
72e85a6
feat(java): support JSON bean properties
chaokunyang Jul 1, 2026
78ef548
perf(java): optimize Fory JSON UTF8 reads
chaokunyang Jul 1, 2026
04d8e2d
perf(java): specialize JSON string arrays
chaokunyang Jul 1, 2026
2163cd5
perf(java): speed up Fory JSON long writes
chaokunyang Jul 1, 2026
430486d
perf(java): write JSON scalar dates directly
chaokunyang Jul 1, 2026
256887e
feat(java): add Fory JSON OutputStream writes
chaokunyang Jul 1, 2026
6b633df
perf(java): specialize Fory JSON generated scalars
chaokunyang Jul 1, 2026
8ea53d6
perf(java): optimize Fory JSON string collections
chaokunyang Jul 1, 2026
40f27e9
perf(java): specialize Fory JSON BigDecimal writes
chaokunyang Jul 1, 2026
2ab0254
perf(java): speed up Fory JSON BigDecimal reads
chaokunyang Jul 1, 2026
c48e586
perf(java): fast-path UTC JSON timestamps
chaokunyang Jul 1, 2026
e3b320f
perf(java): split Fory JSON generated writers
chaokunyang Jul 1, 2026
1a8c83c
perf(java): add Fory JSON common array codecs
chaokunyang Jul 1, 2026
d0b9bd8
perf(java): split Fory JSON generated readers
chaokunyang Jul 1, 2026
69a30d8
perf(java): pack Fory JSON generated field prefixes
chaokunyang Jul 1, 2026
591c284
perf(java): specialize Fory JSON ArrayList object writes
chaokunyang Jul 1, 2026
0f285ad
perf(java): copy Fory JSON numeric bytes directly
chaokunyang Jul 1, 2026
f454260
perf(java): copy Fory JSON short Latin1 tails
chaokunyang Jul 1, 2026
8f4f461
perf(java): retain medium Fory JSON writer buffers
chaokunyang Jul 1, 2026
4935994
perf(java): emit exact Fory JSON array writes
chaokunyang Jul 1, 2026
c3b85e3
perf(json): add short latin1 string writer path
chaokunyang Jul 1, 2026
fea28c8
perf(json): split latin1 string writer dispatch
chaokunyang Jul 1, 2026
a3758bf
perf(json): match long ascii field tokens
chaokunyang Jul 1, 2026
10cc77f
perf(json): read utf8 doubles directly
chaokunyang Jul 1, 2026
d7556fe
perf(json): read small utf8 string arrays directly
chaokunyang Jul 1, 2026
37b08da
perf(json): read utf8 uuids directly
chaokunyang Jul 1, 2026
d19e410
perf(json): read small utf8 long arrays directly
chaokunyang Jul 1, 2026
ffa29c8
perf(json): read small utf8 arraylists exactly
chaokunyang Jul 2, 2026
99a9b40
perf(json): read nine utf8 strings exactly
chaokunyang Jul 2, 2026
b34ac9a
perf(json): split utf8 arraylist reads
chaokunyang Jul 2, 2026
a41c982
perf(json): speed up negative long reads
chaokunyang Jul 2, 2026
57fa99a
perf(json): avoid long tail division
chaokunyang Jul 2, 2026
277a314
perf(json): cache object array reads
chaokunyang Jul 2, 2026
01bbb9a
perf(json): stack object array scratch buffers
chaokunyang Jul 2, 2026
f457f9f
perf(json): read object arraylists exactly
chaokunyang Jul 2, 2026
306c134
perf(java): compact Fory JSON reader hot paths
chaokunyang Jul 2, 2026
7a002cd
perf(java): parse UTF-8 long digit blocks
chaokunyang Jul 2, 2026
38261a7
perf(java): compact Fory JSON UTF-8 string scan
chaokunyang Jul 2, 2026
0294768
perf(java): fold Fory JSON UTF-8 string mask
chaokunyang Jul 2, 2026
081b678
fix(java): restore json ci
chaokunyang Jul 2, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
33 changes: 31 additions & 2 deletions java/fory-json/src/main/java/org/apache/fory/json/ForyJson.java
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,9 @@

package org.apache.fory.json;

import java.io.OutputStream;
import java.lang.reflect.Type;
import java.util.Objects;
import java.util.concurrent.atomic.AtomicReference;
import java.util.concurrent.atomic.AtomicReferenceArray;
import org.apache.fory.json.codec.GeneratedObjectCodec;
Expand Down Expand Up @@ -55,10 +57,16 @@ public final class ForyJson {
private final AtomicReferenceArray<PooledState> slots;

ForyJson(
boolean writeNullFields, boolean codegenEnabled, int maxDepth, CodecRegistry codecRegistry) {
boolean writeNullFields,
boolean codegenEnabled,
boolean propertyDiscoveryEnabled,
int maxDepth,
CodecRegistry codecRegistry) {
this.writeNullFields = writeNullFields;
this.maxDepth = maxDepth;
sharedRegistry = new JsonSharedRegistry(codegenEnabled, writeNullFields, codecRegistry);
sharedRegistry =
new JsonSharedRegistry(
codegenEnabled, writeNullFields, propertyDiscoveryEnabled, codecRegistry);
poolSize = DEFAULT_POOL_SIZE;
primarySlot =
new AtomicReference<>(
Expand Down Expand Up @@ -111,6 +119,27 @@ public byte[] toJsonBytes(Object value) {
}
}

/** Serializes {@code value} as UTF-8 JSON to {@code output}. */
public void writeJsonTo(Object value, OutputStream output) {
Objects.requireNonNull(output, "output");
PooledState entry = acquire();
JsonState state = entry.state;
Utf8JsonWriter writer = state.utf8Writer;
try {
if (value == null) {
writer.writeNull();
} else {
JsonTypeResolver resolver = state.typeResolver;
JsonTypeInfo typeInfo = state.rootTypeInfo(value.getClass());
typeInfo.codec().writeUtf8(writer, value, resolver);
}
writer.writeTo(output);
} finally {
writer.reset();
release(entry);
}
}

public <T> T fromJson(String json, Class<T> type) {
PooledState entry = acquire();
JsonState state = entry.state;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
public final class ForyJsonBuilder {
private boolean writeNullFields;
private boolean codegenEnabled = true;
private boolean propertyDiscoveryEnabled = true;
private int maxDepth = ForyJson.DEFAULT_MAX_DEPTH;
private final CodecRegistry codecRegistry = new CodecRegistry();

Expand All @@ -43,6 +44,12 @@ public ForyJsonBuilder withCodegen(boolean codegenEnabled) {
return this;
}

/** Enables JavaBean getter/setter JSON property discovery. */
public ForyJsonBuilder withPropertyDiscovery(boolean propertyDiscoveryEnabled) {
this.propertyDiscoveryEnabled = propertyDiscoveryEnabled;
return this;
}

/** Sets the maximum nested JSON object/array depth allowed while parsing. */
public ForyJsonBuilder maxDepth(int maxDepth) {
if (maxDepth < 1) {
Expand All @@ -59,6 +66,7 @@ public <T> ForyJsonBuilder registerCodec(Class<T> type, JsonCodec codec) {
}

public ForyJson build() {
return new ForyJson(writeNullFields, codegenEnabled, maxDepth, codecRegistry);
return new ForyJson(
writeNullFields, codegenEnabled, propertyDiscoveryEnabled, maxDepth, codecRegistry);
}
}
Loading
Loading