All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.fasterxml.jackson.core.TokenStreamFactory Maven / Gradle / Ivy

Go to download

Core Jackson processing abstractions (aka Streaming API), implementation for JSON

There is a newer version: 2.17.0
Show newest version
package com.fasterxml.jackson.core;

import java.io.*;
import java.net.URL;

import com.fasterxml.jackson.core.io.DataOutputAsStream;

/**
 * Intermediate base class for actual format-specific factories for constructing
 * parsers (reading) and generators (writing). Although full power will only be
 * available with Jackson 3, skeletal implementation added in 2.10 to help conversion
 * of code for 2.x to 3.x migration of projects depending on Jackson
 *
 * @since 2.10
 */
public abstract class TokenStreamFactory
    implements Versioned,
    java.io.Serializable
{
    private static final long serialVersionUID = 2;

    /*
    /**********************************************************
    /* Capability introspection
    /**********************************************************
     */

    /**
     * Introspection method that higher-level functionality may call
     * to see whether underlying data format requires a stable ordering
     * of object properties or not.
     * This is usually used for determining
     * whether to force a stable ordering (like alphabetic ordering by name)
     * if no ordering if explicitly specified.
     *

* Default implementation returns false as JSON does NOT * require stable ordering. Formats that require ordering include positional * textual formats like CSV, and schema-based binary formats * like Avro. */ public abstract boolean requiresPropertyOrdering(); /** * Introspection method that higher-level functionality may call * to see whether underlying data format can read and write binary * data natively; that is, embeded it as-is without using encodings * such as Base64. *

* Default implementation returns false as JSON does not * support native access: all binary content must use Base64 encoding. * Most binary formats (like Smile and Avro) support native binary content. */ public abstract boolean canHandleBinaryNatively(); /** * Introspection method that can be used to check whether this * factory can create non-blocking parsers: parsers that do not * use blocking I/O abstractions but instead use a * {@link com.fasterxml.jackson.core.async.NonBlockingInputFeeder}. */ public abstract boolean canParseAsync(); /** * Method for accessing kind of {@link FormatFeature} that a parser * {@link JsonParser} produced by this factory would accept, if any; * null returned if none. * * @since 2.6 */ public abstract Class getFormatReadFeatureType(); /** * Method for accessing kind of {@link FormatFeature} that a parser * {@link JsonGenerator} produced by this factory would accept, if any; * null returned if none. * * @since 2.6 */ public abstract Class getFormatWriteFeatureType(); /* /********************************************************** /* Format detection functionality /********************************************************** */ /** * Method that can be used to quickly check whether given schema * is something that parsers and/or generators constructed by this * factory could use. Note that this means possible use, at the level * of data format (i.e. schema is for same data format as parsers and * generators this factory constructs); individual schema instances * may have further usage restrictions. * * @since 2.1 */ public abstract boolean canUseSchema(FormatSchema schema); /** * Method that returns short textual id identifying format * this factory supports. */ public abstract String getFormatName(); /* /********************************************************** /* Configuration access /********************************************************** */ public abstract boolean isEnabled(JsonParser.Feature f); public abstract boolean isEnabled(JsonGenerator.Feature f); public abstract int getParserFeatures(); public abstract int getGeneratorFeatures(); public abstract int getFormatParserFeatures(); public abstract int getFormatGeneratorFeatures(); /* /********************************************************** /* Factory methods, parsers /********************************************************** */ public abstract JsonParser createParser(byte[] data) throws IOException; public abstract JsonParser createParser(byte[] data, int offset, int len) throws IOException; public abstract JsonParser createParser(char[] content) throws IOException; public abstract JsonParser createParser(char[] content, int offset, int len) throws IOException; public abstract JsonParser createParser(DataInput in) throws IOException; public abstract JsonParser createParser(File f) throws IOException; public abstract JsonParser createParser(InputStream in) throws IOException; public abstract JsonParser createParser(Reader r) throws IOException; public abstract JsonParser createParser(String content) throws IOException; public abstract JsonParser createParser(URL url) throws IOException; public abstract JsonParser createNonBlockingByteArrayParser() throws IOException; /* /********************************************************** /* Factory methods, generators /********************************************************** */ public abstract JsonGenerator createGenerator(DataOutput out, JsonEncoding enc) throws IOException; public abstract JsonGenerator createGenerator(DataOutput out) throws IOException; public abstract JsonGenerator createGenerator(File f, JsonEncoding enc) throws IOException; public abstract JsonGenerator createGenerator(OutputStream out) throws IOException; public abstract JsonGenerator createGenerator(OutputStream out, JsonEncoding enc) throws IOException; public abstract JsonGenerator createGenerator(Writer w) throws IOException; /* /********************************************************** /* Internal factory methods, other /********************************************************** */ protected OutputStream _createDataOutputWrapper(DataOutput out) { return new DataOutputAsStream(out); } /** * Helper methods used for constructing an optimal stream for * parsers to use, when input is to be read from an URL. * This helps when reading file content via URL. */ protected InputStream _optimizedStreamFromURL(URL url) throws IOException { if ("file".equals(url.getProtocol())) { /* Can not do this if the path refers * to a network drive on windows. This fixes the problem; * might not be needed on all platforms (NFS?), but should not * matter a lot: performance penalty of extra wrapping is more * relevant when accessing local file system. */ String host = url.getHost(); if (host == null || host.length() == 0) { // [core#48]: Let's try to avoid probs with URL encoded stuff String path = url.getPath(); if (path.indexOf('%') < 0) { return new FileInputStream(url.getPath()); } // otherwise, let's fall through and let URL decoder do its magic } } return url.openStream(); } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy