Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
124 commits
Select commit Hold shift + click to select a range
698f7f2
Bump maven-javadoc-plugin from 3.3.0 to 3.3.2
dependabot[bot] Feb 11, 2022
59b4845
Bump maven-site-plugin from 3.9.1 to 3.11.0
dependabot[bot] Feb 16, 2022
9fb6748
Bump nexus-staging-maven-plugin from 1.6.8 to 1.6.12
dependabot[bot] Feb 22, 2022
ff4a739
Bump maven-compiler-plugin from 3.8.1 to 3.10.1
dependabot[bot] Mar 11, 2022
e76892e
Merge pull request #67 from mmastrac/dependabot/maven/org.apache.mave…
mmastrac Mar 18, 2022
c2fead4
Merge pull request #61 from mmastrac/dependabot/maven/org.apache.mave…
mmastrac Mar 18, 2022
fed7737
Merge pull request #65 from mmastrac/dependabot/maven/org.apache.mave…
mmastrac Mar 18, 2022
2f9d44b
Merge pull request #66 from mmastrac/dependabot/maven/org.sonatype.pl…
mmastrac Mar 18, 2022
a0ce04c
Bump maven-javadoc-plugin from 3.3.2 to 3.4.0
dependabot[bot] Apr 20, 2022
530a7bf
Bump maven-site-plugin from 3.11.0 to 3.12.0
dependabot[bot] Apr 20, 2022
0f34e67
Bump nexus-staging-maven-plugin from 1.6.12 to 1.6.13
dependabot[bot] Apr 21, 2022
c32145e
Bump exec-maven-plugin from 3.0.0 to 3.1.0
dependabot[bot] Jul 15, 2022
970e874
Merge pull request #72 from mmastrac/dependabot/maven/org.codehaus.mo…
mmastrac Jul 20, 2022
2b58935
Merge pull request #71 from mmastrac/dependabot/maven/org.sonatype.pl…
mmastrac Jul 20, 2022
58dc40c
Merge pull request #69 from mmastrac/dependabot/maven/org.apache.mave…
mmastrac Jul 20, 2022
132ada2
Merge pull request #70 from mmastrac/dependabot/maven/org.apache.mave…
mmastrac Jul 20, 2022
dfa0306
Bump maven-site-plugin from 3.12.0 to 3.12.1
dependabot[bot] Aug 4, 2022
6b8c1ef
Implements toString on JsonLazyNumber.
Aug 9, 2022
50459f2
Merge pull request #74 from adriantodt/issue/nanojson-68
mmastrac Aug 9, 2022
d96f57e
Merge pull request #73 from mmastrac/dependabot/maven/org.apache.mave…
mmastrac Aug 9, 2022
7d0dee8
Bump maven-javadoc-plugin from 3.4.0 to 3.4.1
dependabot[bot] Aug 15, 2022
8ed9dc5
Bump maven-checkstyle-plugin from 3.1.2 to 3.2.1
dependabot[bot] Jan 11, 2023
3c62a14
Merge pull request #78 from mmastrac/dependabot/maven/org.apache.mave…
mmastrac Jan 15, 2023
3a9c8b5
Merge pull request #75 from mmastrac/dependabot/maven/org.apache.mave…
mmastrac Jan 15, 2023
4415046
Bump maven-javadoc-plugin from 3.4.1 to 3.5.0
dependabot[bot] Feb 15, 2023
1befd8c
Bump maven-surefire-report-plugin from 2.22.2 to 3.0.0
dependabot[bot] Mar 14, 2023
03ff2a8
Merge pull request #81 from mmastrac/dependabot/maven/org.apache.mave…
mmastrac Mar 23, 2023
5b9a587
Merge pull request #79 from mmastrac/dependabot/maven/org.apache.mave…
mmastrac Mar 23, 2023
5b53963
Delete codeql-analysis.yml
mmastrac Mar 23, 2023
c0c6958
Create .github/workflows/maven.yml
mmastrac Mar 23, 2023
6ca7be9
Update checkstyle.xml
mmastrac Mar 23, 2023
24cbcc8
Bump advanced-security/maven-dependency-submission-action
mmastrac Apr 16, 2024
c12c8da
Remove dependabot step
mmastrac Apr 16, 2024
4607332
Bump org.apache.maven.plugins:maven-surefire-report-plugin
dependabot[bot] Apr 16, 2024
032ecb3
Bump org.apache.maven.plugins:maven-gpg-plugin from 3.0.1 to 3.2.3
dependabot[bot] Apr 16, 2024
5c9a043
Merge pull request #90 from mmastrac/dependabot/maven/org.apache.mave…
mmastrac Apr 16, 2024
09feb70
Merge pull request #92 from mmastrac/dependabot/maven/org.apache.mave…
mmastrac Apr 16, 2024
25ab1e7
Bump org.apache.maven.plugins:maven-checkstyle-plugin
dependabot[bot] Apr 16, 2024
293db9f
Bump org.apache.maven.plugins:maven-source-plugin from 3.2.1 to 3.3.1
dependabot[bot] Apr 16, 2024
c040d14
Merge pull request #94 from mmastrac/dependabot/maven/org.apache.mave…
mmastrac Apr 16, 2024
e432928
Merge pull request #93 from mmastrac/dependabot/maven/org.apache.mave…
mmastrac Apr 16, 2024
161c8a9
Bump org.codehaus.mojo:exec-maven-plugin from 3.1.0 to 3.2.0
dependabot[bot] Apr 16, 2024
6cc09b8
Bump org.apache.maven.plugins:maven-javadoc-plugin from 3.5.0 to 3.6.3
dependabot[bot] Apr 16, 2024
efc8478
Add a method to JsonSink to allow separate writing of key and value
Tillerino Apr 17, 2024
b432f94
Merge pull request #95 from mmastrac/dependabot/maven/org.codehaus.mo…
mmastrac Apr 17, 2024
c613484
Merge pull request #96 from mmastrac/dependabot/maven/org.apache.mave…
mmastrac Apr 17, 2024
8db90a8
Merge pull request #97 from Tillerino/separate-key-value
mmastrac Apr 17, 2024
14c19ad
Bump version
mmastrac Apr 17, 2024
4414c48
Bump org.apache.maven.plugins:maven-gpg-plugin from 3.2.3 to 3.2.4
dependabot[bot] Apr 19, 2024
2e24a10
Merge pull request #99 from mmastrac/dependabot/maven/org.apache.mave…
mmastrac Apr 20, 2024
49734c9
dependabot[bot] May 21, 2024
b27dc93
Merge pull request #100 from mmastrac/dependabot/maven/org.codehaus.m…
mmastrac May 21, 2024
cb943ef
Bump org.sonatype.plugins:nexus-staging-maven-plugin
dependabot[bot] May 27, 2024
a5c7d6d
Merge pull request #101 from mmastrac/dependabot/maven/org.sonatype.p…
mmastrac May 28, 2024
c02a528
Bump org.apache.maven.plugins:maven-javadoc-plugin from 3.6.3 to 3.7.0
dependabot[bot] May 31, 2024
8365c41
Merge pull request #102 from mmastrac/dependabot/maven/org.apache.mav…
mmastrac Jun 2, 2024
005fd56
Bump org.apache.maven.plugins:maven-checkstyle-plugin
dependabot[bot] Jun 5, 2024
1e848c2
Merge pull request #103 from mmastrac/dependabot/maven/org.apache.mav…
mmastrac Jun 7, 2024
b35e744
Bump org.apache.maven.plugins:maven-surefire-report-plugin
dependabot[bot] Jul 10, 2024
8397985
Bump org.apache.maven.plugins:maven-javadoc-plugin from 3.7.0 to 3.8.0
dependabot[bot] Jul 22, 2024
7ec7113
Merge pull request #106 from mmastrac/dependabot/maven/org.apache.mav…
mmastrac Jul 23, 2024
4b6020a
Merge pull request #105 from mmastrac/dependabot/maven/org.apache.mav…
mmastrac Jul 23, 2024
109bbae
Bump org.codehaus.mojo:exec-maven-plugin from 3.3.0 to 3.4.1
dependabot[bot] Aug 12, 2024
e56a9ff
Bump org.apache.maven.plugins:maven-gpg-plugin from 3.2.4 to 3.2.5
dependabot[bot] Aug 12, 2024
a2f5526
Bump org.apache.maven.plugins:maven-site-plugin from 3.12.1 to 3.20.0
dependabot[bot] Aug 19, 2024
8586572
Bump org.apache.maven.plugins:maven-checkstyle-plugin
dependabot[bot] Aug 22, 2024
31652f0
Bump org.apache.maven.plugins:maven-surefire-report-plugin
dependabot[bot] Aug 27, 2024
4a8cf8f
Bump org.apache.maven.plugins:maven-javadoc-plugin from 3.8.0 to 3.10.0
dependabot[bot] Aug 27, 2024
55ebaa0
Merge pull request #114 from mmastrac/dependabot/maven/org.apache.mav…
mmastrac Sep 13, 2024
877328a
Merge pull request #113 from mmastrac/dependabot/maven/org.apache.mav…
mmastrac Sep 13, 2024
9acc7ef
Merge pull request #108 from mmastrac/dependabot/maven/org.codehaus.m…
mmastrac Sep 13, 2024
aa79a1f
Merge pull request #109 from mmastrac/dependabot/maven/org.apache.mav…
mmastrac Sep 13, 2024
aec0753
Merge pull request #110 from mmastrac/dependabot/maven/org.apache.mav…
mmastrac Sep 13, 2024
4ce63b1
Merge pull request #112 from mmastrac/dependabot/maven/org.apache.mav…
mmastrac Sep 13, 2024
1f66597
Bump org.apache.maven.plugins:maven-gpg-plugin from 3.2.5 to 3.2.6
dependabot[bot] Sep 16, 2024
63f3ca1
Merge pull request #115 from mmastrac/dependabot/maven/org.apache.mav…
mmastrac Sep 16, 2024
bb0c411
Bump org.apache.maven.plugins:maven-gpg-plugin from 3.2.6 to 3.2.7
dependabot[bot] Sep 27, 2024
8e131c3
Merge pull request #116 from mmastrac/dependabot/maven/org.apache.mav…
mmastrac Sep 28, 2024
862daea
Bump org.apache.maven.plugins:maven-javadoc-plugin from 3.10.0 to 3.10.1
dependabot[bot] Oct 1, 2024
b4187b1
Bump org.apache.maven.plugins:maven-surefire-report-plugin
dependabot[bot] Oct 7, 2024
4f2b238
Bump org.codehaus.mojo:exec-maven-plugin from 3.4.1 to 3.5.0
dependabot[bot] Oct 22, 2024
c0c271c
Bump org.apache.maven.plugins:maven-site-plugin from 3.20.0 to 3.21.0
dependabot[bot] Oct 22, 2024
07a6be1
Bump org.apache.maven.plugins:maven-checkstyle-plugin
dependabot[bot] Oct 25, 2024
ac6bf38
Merge pull request #121 from mmastrac/dependabot/maven/org.apache.mav…
mmastrac Nov 4, 2024
6fa30f1
Merge pull request #119 from mmastrac/dependabot/maven/org.codehaus.m…
mmastrac Nov 4, 2024
7ca1cf2
Merge pull request #120 from mmastrac/dependabot/maven/org.apache.mav…
mmastrac Nov 4, 2024
d8bce7e
Merge pull request #118 from mmastrac/dependabot/maven/org.apache.mav…
mmastrac Nov 4, 2024
bf01e57
Merge pull request #117 from mmastrac/dependabot/maven/org.apache.mav…
mmastrac Nov 4, 2024
c8ef1a2
Bump org.apache.maven.plugins:maven-surefire-report-plugin
dependabot[bot] Nov 4, 2024
a589fa4
Bump org.apache.maven.plugins:maven-javadoc-plugin from 3.10.1 to 3.11.2
dependabot[bot] Dec 9, 2024
9d97b51
Merge pull request #123 from mmastrac/dependabot/maven/org.apache.mav…
mmastrac Jan 10, 2025
152eede
Merge pull request #124 from mmastrac/dependabot/maven/org.apache.mav…
mmastrac Jan 10, 2025
45e8740
Add Autoconversion of elegible Objects to Json (#125)
heisluft Jan 20, 2025
3af4ba4
Bump org.apache.maven.plugins:maven-surefire-report-plugin (#132)
dependabot[bot] Apr 10, 2025
a66ce6d
Fixes #98 by following modern Javascript's behaviour regarding NaN/In…
NotJustAnna Apr 12, 2025
f21fdc6
Create JsonReader from Reader (#135)
stbischof May 8, 2025
e301748
Use <release>8 instead of target/source (#138)
mmastrac May 8, 2025
178d5ed
Bump org.apache.maven.plugins:maven-compiler-plugin (#127)
dependabot[bot] May 8, 2025
81e84ca
OSGi Support (#136)
stbischof May 10, 2025
4a6732f
Update test from junit4 to JUnit5 - BestPractices (#137)
stbischof May 10, 2025
f7903f9
Bump versions
mmastrac May 10, 2025
6877461
Bump org.codehaus.mojo:exec-maven-plugin from 3.5.0 to 3.5.1 (#139)
dependabot[bot] May 30, 2025
bba8dac
Bump org.junit.jupiter:junit-jupiter from 5.12.2 to 5.13.0 (#140)
dependabot[bot] Jun 4, 2025
1018a60
Bump org.junit.jupiter:junit-jupiter from 5.13.0 to 5.13.3 (#144)
dependabot[bot] Jul 7, 2025
f75f1e0
Bump org.apache.maven.plugins:maven-gpg-plugin from 3.2.7 to 3.2.8 (#…
dependabot[bot] Jul 7, 2025
2c5477f
Bump org.apache.maven.plugins:maven-javadoc-plugin from 3.11.2 to 3.1…
dependabot[bot] Aug 26, 2025
f027896
Bump org.junit.jupiter:junit-jupiter from 5.13.3 to 5.13.4 (#145)
dependabot[bot] Aug 26, 2025
9718d33
Revert "Fix issue for semi-strings as well"
Stypox Oct 3, 2025
b52e21a
Revert "Fix Checkstyle errors"
Stypox Oct 3, 2025
714bb89
Revert "Disallow semi-strings as value"
Stypox Oct 3, 2025
e2cd3f0
Revert "Fix some more semi-string parsing bugs"
Stypox Oct 3, 2025
f9d8d68
Revert "Support keywords as keys"
Stypox Oct 3, 2025
d3b1b70
Revert "Support single quote strings"
Stypox Oct 3, 2025
41f29d8
Revert "Support keys starting with a non-ASCII character"
Stypox Oct 3, 2025
72c8ed4
Revert "Support JS-like JSON"
Stypox Oct 3, 2025
fcb2efd
Update README
Stypox Oct 3, 2025
d331e00
Merge remote-tracking branch 'mmastrac/master' into revert-our-change…
Stypox Oct 3, 2025
0883395
Attempt to use CharBuffer and fastdoubleparser for better performance.
FireMasterK Dec 8, 2022
dd52604
Attempt to lazily parse numbers by default.
FireMasterK Mar 6, 2023
3e5bd69
Implement lazy String parsing.
FireMasterK Mar 17, 2023
68a1285
Minimize initial buffer size to reduce memory usage.
FireMasterK Aug 4, 2023
df185fe
Buffer Pool, UTF Surrogate and test fixes.
FireMasterK Aug 23, 2025
397a11a
Fix checkstyle
Stypox Oct 3, 2025
2a27a17
Maintain compatibility with Java 11
Stypox Oct 3, 2025
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
54 changes: 0 additions & 54 deletions .github/workflows/codeql-analysis.yml

This file was deleted.

31 changes: 31 additions & 0 deletions .github/workflows/maven.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
# This workflow will build a Java project with Maven, and cache/restore any dependencies to improve the workflow execution time
# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-java-with-maven

# This workflow uses actions that are not certified by GitHub.
# They are provided by a third-party and are governed by
# separate terms of service, privacy policy, and support
# documentation.

name: Java CI with Maven

on:
push:
branches: [ "master" ]
pull_request:
branches: [ "master" ]

jobs:
build:

runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v3
- name: Set up JDK 11
uses: actions/setup-java@v3
with:
java-version: '17'
distribution: 'temurin'
cache: maven
- name: Build with Maven
run: mvn -B package --file pom.xml
3 changes: 1 addition & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,5 @@

This is a fork of [nanojson](https://github.com/mmastrac/nanojson) for use by NewPipe(Extractor). It has the following changes:

- It returns an empty `JsonObject` or `JsonArray` by default instead of `null`, preventing `NullPointerException`s.
- It accepts JS-like JSON, such as `{ this: 'is', an: 'example' }`.
- Added ``JsonArray#streamAs`` and ``JsonArray#streamAsJsonObjects`` shortcut methods.
- Various performance improvements borrowed from [@FireMasterK's fork](https://github.com/FireMasterK/nanojson).
5 changes: 2 additions & 3 deletions checkstyle.xml
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,7 @@
</module>

<module name="LineLength">
<property name="max" value="120" />
<property name="tabWidth" value="4" />
<property name="max" value="150" />
</module>

<!-- If you set the basedir property below, then all reported file names
Expand Down Expand Up @@ -70,7 +69,7 @@
<!-- Checks for Javadoc comments. -->
<!-- See http://checkstyle.sf.net/config_javadoc.html -->
<module name="JavadocMethod">
<property name="scope" value="public" />
<property name="accessModifiers" value="public" />
<property name="allowMissingParamTags" value="true" />
<property name="allowMissingReturnTag" value="true" />
</module>
Expand Down
103 changes: 64 additions & 39 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -13,19 +13,35 @@
<artifactId>nanojson</artifactId>
<packaging>jar</packaging>
<name>nanojson</name>
<version>1.8-SNAPSHOT</version>
<version>1.11-SNAPSHOT</version>

<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<maven.compiler.target>11</maven.compiler.target>
<maven.compiler.source>11</maven.compiler.source>
</properties>
<dependencies>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>5.13.4</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>ch.randelshofer</groupId>
<artifactId>fastdoubleparser</artifactId>
<version>2.0.1</version>
<scope>compile</scope>
</dependency>
</dependencies>

<reporting>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>3.3.0</version>
<version>3.11.3</version>
<reportSets>
<reportSet>
<id>html</id>
Expand All @@ -44,7 +60,7 @@
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-checkstyle-plugin</artifactId>
<version>3.1.2</version>
<version>3.6.0</version>
<configuration>
<configLocation>checkstyle.xml</configLocation>
<propertyExpansion>basedir=${basedir}</propertyExpansion>
Expand All @@ -66,7 +82,7 @@
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-report-plugin</artifactId>
<version>2.22.2</version>
<version>3.5.3</version>
<reportSets>
<reportSet>
<reports>
Expand All @@ -77,21 +93,12 @@
</plugin>
</plugins>
</reporting>

<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>3.2.1</version>
<version>3.3.1</version>
<executions>
<execution>
<id>attach-sources</id>
Expand All @@ -104,7 +111,7 @@
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>3.3.0</version>
<version>3.11.3</version>
<executions>
<execution>
<id>attach-javadocs</id>
Expand All @@ -117,7 +124,7 @@
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-checkstyle-plugin</artifactId>
<version>3.1.2</version>
<version>3.6.0</version>
<configuration>
<configLocation>checkstyle.xml</configLocation>
<propertyExpansion>basedir=${basedir}</propertyExpansion>
Expand Down Expand Up @@ -145,7 +152,7 @@
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>3.0.0</version>
<version>3.5.1</version>

<configuration>
<executable>java</executable>
Expand All @@ -165,15 +172,10 @@
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<version>3.14.0</version>
<configuration>
<debug>true</debug>
<debuglevel>none</debuglevel>
<source>1.8</source>
<target>1.8</target>
<archive>
<manifestFile>src/main/resources/META-INF/MANIFEST.MF</manifestFile>
</archive>
<debug>false</debug>
<release>11</release>
<compilerArgument>-Xlint:all</compilerArgument>
<compilerArguments>
<Werror />
Expand All @@ -183,21 +185,44 @@
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-site-plugin</artifactId>
<version>3.9.1</version>
<version>3.21.0</version>
<configuration>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifestEntries>
<Automatic-Module-Name>com.grack.nanojson</Automatic-Module-Name>
</manifestEntries>
</archive>
</configuration>
</plugin>
<plugin>
<groupId>biz.aQute.bnd</groupId>
<artifactId>bnd-maven-plugin</artifactId>
<extensions>true</extensions>
<executions>
<execution>
<id>jar</id>
<goals>
<goal>jar</goal>
</goals>
<configuration>
<bnd><![CDATA[
Bundle-SymbolicName: ${groupId}.${artifactId}
Export-Package: com.grack.nanojson
-jpms-module-info: com.grack.nanojson
-noextraheaders:
-removeheaders: \
Tool, \
Bnd-LastModified, \
Bnd-ManifestVersion, \
Build-Jdk, \
Built-By, \
Created-By, \
Private-Package, \
Bundle-DocURL, \
Bundle-Name, \
Bundle-Vendor,\
Bundle-Description,\
Bundle-SCM
]]></bnd>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>

Expand All @@ -210,7 +235,7 @@
<plugin>
<groupId>org.sonatype.plugins</groupId>
<artifactId>nexus-staging-maven-plugin</artifactId>
<version>1.6.8</version>
<version>1.7.0</version>
<extensions>true</extensions>
<configuration>
<serverId>sonatype-nexus-staging</serverId>
Expand All @@ -221,7 +246,7 @@
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-gpg-plugin</artifactId>
<version>3.0.1</version>
<version>3.2.8</version>
<executions>
<execution>
<id>sign-artifacts</id>
Expand Down
69 changes: 69 additions & 0 deletions src/main/java/com/grack/nanojson/CharBufferPool.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
/*
* Copyright 2011 The nanojson Authors
*
* Licensed under the Apache License, Version 2.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://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/
package com.grack.nanojson;

import java.nio.CharBuffer;
import java.util.PriorityQueue;
import java.util.concurrent.atomic.AtomicInteger;

public final class CharBufferPool {

private static final AtomicInteger SIZE = new AtomicInteger(0);
private static final int MAX_SIZE = 1000;
private static final int MAX_RETAINED_BUFFER_SIZE = 16 * 1024; // 16KB limit for pooled buffers

private static final PriorityQueue<CharBuffer> BUFFERS = new PriorityQueue<>();

private CharBufferPool() {
}

public static CharBuffer get(int capacity) {
synchronized (BUFFERS) {
if (!BUFFERS.isEmpty()) {
CharBuffer buffer = BUFFERS.poll();
if (buffer.capacity() < capacity) {
return CharBuffer.allocate(capacity);
}
return buffer;
}
}

if (SIZE.incrementAndGet() > MAX_SIZE) {
SIZE.decrementAndGet();
throw new IllegalStateException("Buffer pool size limit exceeded");
}

return CharBuffer.allocate(capacity);
}

public static void release(CharBuffer buffer) {
if (buffer == null || buffer.capacity() <= 0) {
return;
}

if (buffer.limit() > MAX_RETAINED_BUFFER_SIZE) {
// If the buffer is too large, decrement SIZE so another can be created
SIZE.decrementAndGet();
return;
}

buffer.clear();

synchronized (BUFFERS) {
BUFFERS.add(buffer);
}
}
}
Loading