Categories:
Audio (13)
Biotech (29)
Bytecode (36)
Database (77)
Framework (7)
Game (7)
General (507)
Graphics (53)
I/O (35)
IDE (2)
JAR Tools (101)
JavaBeans (21)
JDBC (121)
JDK (426)
JSP (20)
Logging (108)
Mail (58)
Messaging (8)
Network (84)
PDF (97)
Report (7)
Scripting (84)
Security (32)
Server (121)
Servlet (26)
SOAP (24)
Testing (54)
Web (15)
XML (309)
Collections:
Other Resources:
Jackson Core Source Code
Jackson is "the Java JSON library" or "the best JSON parser for Java". Or simply as "JSON for Java".
Jackson Core Source Code files are provided in the source packge (jackson-core-2.14.0-sources.jar). You can download it at Jackson Maven Website.
You can also browse Jackson Core Source Code below:
✍: FYIcenter.com
⏎ com/fasterxml/jackson/core/io/BigDecimalParser.java
package com.fasterxml.jackson.core.io; import java.math.BigDecimal; import java.util.Arrays; // Based on a great idea of Eric Obermühlner to use a tree of smaller BigDecimals for parsing // really big numbers with O(n^1.5) complexity instead of O(n^2) when using the constructor // for a decimal representation from JDK 8/11: // // https://github.com/eobermuhlner/big-math/commit/7a5419aac8b2adba2aa700ccf00197f97b2ad89f /** * Helper class used to implement more optimized parsing of {@link BigDecimal} for REALLY * big values (over 500 characters) *<p> * Based on ideas from this * <a href="https://github.com/eobermuhlner/big-math/commit/7a5419aac8b2adba2aa700ccf00197f97b2ad89f">this * git commit</a>. * * @since 2.13 */ public final class BigDecimalParser { private final static int MAX_CHARS_TO_REPORT = 1000; private BigDecimalParser() {} public static BigDecimal parse(String valueStr) { return parse(valueStr.toCharArray()); } public static BigDecimal parse(final char[] chars, final int off, final int len) { try { if (len < 500) { return new BigDecimal(chars, off, len); } return parseBigDecimal(chars, off, len, len / 10); // 20-Aug-2022, tatu: Although "new BigDecimal(...)" only throws NumberFormatException // operations by "parseBigDecimal()" can throw "ArithmeticException", so handle both: } catch (ArithmeticException | NumberFormatException e) { String desc = e.getMessage(); // 05-Feb-2021, tatu: Alas, JDK mostly has null message so: if (desc == null) { desc = "Not a valid number representation"; } String stringToReport; if (len <= MAX_CHARS_TO_REPORT) { stringToReport = new String(chars, off, len); } else { stringToReport = new String(Arrays.copyOfRange(chars, off, MAX_CHARS_TO_REPORT)) + "(truncated, full length is " + chars.length + " chars)"; } throw new NumberFormatException("Value \"" + stringToReport + "\" can not be represented as `java.math.BigDecimal`, reason: " + desc); } } public static BigDecimal parse(char[] chars) { return parse(chars, 0, chars.length); } private static BigDecimal parseBigDecimal(final char[] chars, final int off, final int len, final int splitLen) { boolean numHasSign = false; boolean expHasSign = false; boolean neg = false; int numIdx = off; int expIdx = -1; int dotIdx = -1; int scale = 0; final int endIdx = off + len; for (int i = off; i < endIdx; i++) { char c = chars[i]; switch (c) { case '+': if (expIdx >= 0) { if (expHasSign) { throw new NumberFormatException("Multiple signs in exponent"); } expHasSign = true; } else { if (numHasSign) { throw new NumberFormatException("Multiple signs in number"); } numHasSign = true; numIdx = i + 1; } break; case '-': if (expIdx >= 0) { if (expHasSign) { throw new NumberFormatException("Multiple signs in exponent"); } expHasSign = true; } else { if (numHasSign) { throw new NumberFormatException("Multiple signs in number"); } numHasSign = true; neg = true; numIdx = i + 1; } break; case 'e': case 'E': if (expIdx >= 0) { throw new NumberFormatException("Multiple exponent markers"); } expIdx = i; break; case '.': if (dotIdx >= 0) { throw new NumberFormatException("Multiple decimal points"); } dotIdx = i; break; default: if (dotIdx >= 0 && expIdx == -1) { scale++; } } } int numEndIdx; int exp = 0; if (expIdx >= 0) { numEndIdx = expIdx; String expStr = new String(chars, expIdx + 1, endIdx - expIdx - 1); exp = Integer.parseInt(expStr); scale = adjustScale(scale, exp); } else { numEndIdx = endIdx; } BigDecimal res; if (dotIdx >= 0) { int leftLen = dotIdx - numIdx; BigDecimal left = toBigDecimalRec(chars, numIdx, leftLen, exp, splitLen); int rightLen = numEndIdx - dotIdx - 1; BigDecimal right = toBigDecimalRec(chars, dotIdx + 1, rightLen, exp - rightLen, splitLen); res = left.add(right); } else { res = toBigDecimalRec(chars, numIdx, numEndIdx - numIdx, exp, splitLen); } if (scale != 0) { res = res.setScale(scale); } if (neg) { res = res.negate(); } return res; } private static int adjustScale(int scale, long exp) { long adjScale = scale - exp; if (adjScale > Integer.MAX_VALUE || adjScale < Integer.MIN_VALUE) { throw new NumberFormatException( "Scale out of range: " + adjScale + " while adjusting scale " + scale + " to exponent " + exp); } return (int) adjScale; } private static BigDecimal toBigDecimalRec(final char[] chars, final int off, final int len, final int scale, final int splitLen) { if (len > splitLen) { int mid = len / 2; BigDecimal left = toBigDecimalRec(chars, off, mid, scale + len - mid, splitLen); BigDecimal right = toBigDecimalRec(chars, off + mid, len - mid, scale, splitLen); return left.add(right); } return len == 0 ? BigDecimal.ZERO : new BigDecimal(chars, off, len).movePointRight(scale); } }
⏎ com/fasterxml/jackson/core/io/BigDecimalParser.java
Or download all of them as a single archive file:
File name: jackson-core-2.14.0-sources.jar File size: 497693 bytes Release date: 2022-11-05 Download
⇒ Download and Install Jackson Binary Package
2016-02-03, 38560👍, 1💬
Popular Posts:
io.jar is a component in iText Java library to provide input/output functionalities. iText Java libr...
What Is XMLBeans xbean.jar 2.6.0? XMLBeans xbean.jar 2.6.0 is the JAR file for Apache XMLBeans 2.6.0...
JDK 11 jdk.aot.jmod is the JMOD file for JDK 11 Ahead-of-Time (AOT) Compiler module. JDK 11 AOT Comp...
JDK 11 jdk.compiler.jmod is the JMOD file for JDK 11 Compiler tool, which can be invoked by the "jav...
JAX-WS is an API for building web services and clients. It is the next generation Web Services API r...