diff --git a/src/main/java/com/fasterxml/jackson/databind/deser/std/NumberDeserializers.java b/src/main/java/com/fasterxml/jackson/databind/deser/std/NumberDeserializers.java
index bf59a4f6c2..6fc440b8b6 100644
--- a/src/main/java/com/fasterxml/jackson/databind/deser/std/NumberDeserializers.java
+++ b/src/main/java/com/fasterxml/jackson/databind/deser/std/NumberDeserializers.java
@@ -645,7 +645,7 @@ protected final Float _parseFloat(JsonParser p, DeserializationContext ctxt)
return (Float) getNullValue(ctxt);
}
try {
- return NumberInput.parseFloat(text);
+ return NumberInput.parseFloat(text, p.isEnabled(JsonParser.Feature.USE_FAST_DOUBLE_PARSER));
} catch (IllegalArgumentException iae) { }
return (Float) ctxt.handleWeirdStringValue(_valueClass, text,
"not a valid `Float` value");
@@ -736,7 +736,7 @@ protected final Double _parseDouble(JsonParser p, DeserializationContext ctxt) t
return (Double) getNullValue(ctxt);
}
try {
- return _parseDouble(text);
+ return _parseDouble(text, p.isEnabled(JsonParser.Feature.USE_FAST_DOUBLE_PARSER));
} catch (IllegalArgumentException iae) { }
return (Double) ctxt.handleWeirdStringValue(_valueClass, text,
"not a valid `Double` value");
diff --git a/src/main/java/com/fasterxml/jackson/databind/deser/std/StdDeserializer.java b/src/main/java/com/fasterxml/jackson/databind/deser/std/StdDeserializer.java
index 61f261d775..c18b6c78b9 100644
--- a/src/main/java/com/fasterxml/jackson/databind/deser/std/StdDeserializer.java
+++ b/src/main/java/com/fasterxml/jackson/databind/deser/std/StdDeserializer.java
@@ -1157,10 +1157,24 @@ protected final double _parseDoublePrimitive(DeserializationContext ctxt, String
/**
* Helper method for encapsulating calls to low-level double value parsing; single place
* just because we need a work-around that must be applied to all calls.
+ * Does not use the new useFastParser
support.
+ *
+ * @see #_parseDouble(String, boolean)
+ */
+ protected final static double _parseDouble(final String numStr) throws NumberFormatException
+ {
+ return _parseDouble(numStr, false);
+ }
+
+ /**
+ * Helper method for encapsulating calls to low-level double value parsing; single place
+ * just because we need a work-around that must be applied to all calls.
+ *
+ * @since 2.14
*/
- protected final static double _parseDouble(String numStr) throws NumberFormatException
+ protected final static double _parseDouble(final String numStr, final boolean useFastParser) throws NumberFormatException
{
- return NumberInput.parseDouble(numStr);
+ return NumberInput.parseDouble(numStr, useFastParser);
}
/**
diff --git a/src/test/java/com/fasterxml/jackson/databind/seq/ReadValuesTest.java b/src/test/java/com/fasterxml/jackson/databind/seq/ReadValuesTest.java
index 75582871a4..b3ee8136b0 100644
--- a/src/test/java/com/fasterxml/jackson/databind/seq/ReadValuesTest.java
+++ b/src/test/java/com/fasterxml/jackson/databind/seq/ReadValuesTest.java
@@ -10,6 +10,7 @@
import com.fasterxml.jackson.databind.MappingIterator;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.ObjectReader;
+import com.fasterxml.jackson.databind.json.JsonMapper;
@SuppressWarnings("resource")
public class ReadValuesTest extends BaseMapTest
@@ -307,7 +308,27 @@ public void testNonRootMapsWithObjectReader() throws Exception
assertEquals(2, map.size());
assertFalse(iterator.hasNext());
}
-
+
+ public void testObjectReaderWithJsonParserFastDoubleParser() throws Exception
+ {
+ testObjectReaderWithFastDoubleParser(true);
+ }
+
+ public void testObjectReaderWithJsonReadFeatureFastDoubleParser() throws Exception
+ {
+ testObjectReaderWithFastDoubleParser(false);
+ }
+
+ public void testObjectReaderWithJsonParserFastFloatParser() throws Exception
+ {
+ testObjectReaderWithFastFloatParser(true);
+ }
+
+ public void testObjectReaderWithJsonReadFeatureFastFloatParser() throws Exception
+ {
+ testObjectReaderWithFastFloatParser(false);
+ }
+
public void testNonRootArraysUsingParser() throws Exception
{
final String JSON = "[[1],[3]]";
@@ -342,4 +363,59 @@ public void testEmptyIterator() throws Exception
empty.close();
}
+
+ private void testObjectReaderWithFastDoubleParser(final boolean useParserFeature) throws Exception
+ {
+ final String JSON = "[{ \"val1\": 1.23456, \"val2\": 5 }, { \"val1\": 3.14, \"val2\": -6.5 }]";
+ final ObjectMapper mapper;
+ if (useParserFeature) {
+ JsonFactory factory = new JsonFactory();
+ factory.enable(JsonParser.Feature.USE_FAST_DOUBLE_PARSER);
+ mapper = JsonMapper.builder(factory).build();
+ } else {
+ mapper = JsonMapper.builder().enable(StreamReadFeature.USE_FAST_DOUBLE_PARSER).build();
+ }
+
+ final MappingIterator