Home / Class/ ParserImpl Class — netty Architecture

ParserImpl Class — netty Architecture

Architecture documentation for the ParserImpl class in HostsFileEntriesProvider.java from the netty codebase.

Entity Profile

Dependency Diagram

graph TD
  14d7e681_1163_ec00_8b3c_58318e8912cb["ParserImpl"]
  cbcfc99c_b17c_c5dd_a391_ae0983e567df["HostsFileEntriesProvider.java"]
  14d7e681_1163_ec00_8b3c_58318e8912cb -->|defined in| cbcfc99c_b17c_c5dd_a391_ae0983e567df
  9522d1e4_c39e_67f8_49ea_a951f20ff804["ParserImpl()"]
  14d7e681_1163_ec00_8b3c_58318e8912cb -->|method| 9522d1e4_c39e_67f8_49ea_a951f20ff804
  739f94e7_7fc2_4a77_8254_fa600b0d1490["HostsFileEntriesProvider()"]
  14d7e681_1163_ec00_8b3c_58318e8912cb -->|method| 739f94e7_7fc2_4a77_8254_fa600b0d1490
  59a836ee_f436_2fac_a311_eaf3a8ef9147["File()"]
  14d7e681_1163_ec00_8b3c_58318e8912cb -->|method| 59a836ee_f436_2fac_a311_eaf3a8ef9147

Relationship Graph

Source Code

resolver/src/main/java/io/netty/resolver/HostsFileEntriesProvider.java lines 157–306

    private static final class ParserImpl implements Parser {

        private static final String WINDOWS_DEFAULT_SYSTEM_ROOT = "C:\\Windows";
        private static final String WINDOWS_HOSTS_FILE_RELATIVE_PATH = "\\system32\\drivers\\etc\\hosts";
        private static final String X_PLATFORMS_HOSTS_FILE_PATH = "/etc/hosts";

        private static final Pattern WHITESPACES = Pattern.compile("[ \t]+");

        private static final InternalLogger logger = InternalLoggerFactory.getInstance(Parser.class);

        static final ParserImpl INSTANCE = new ParserImpl();

        private ParserImpl() {
            // singleton
        }

        @Override
        public HostsFileEntriesProvider parse() throws IOException {
            return parse(locateHostsFile(), Charset.defaultCharset());
        }

        @Override
        public HostsFileEntriesProvider parse(Charset... charsets) throws IOException {
            return parse(locateHostsFile(), charsets);
        }

        @Override
        public HostsFileEntriesProvider parse(File file, Charset... charsets) throws IOException {
            checkNotNull(file, "file");
            checkNotNull(charsets, "charsets");
            if (charsets.length == 0) {
                charsets = new Charset[]{Charset.defaultCharset()};
            }
            if (file.exists() && file.isFile()) {
                for (Charset charset : charsets) {
                    try (BufferedReader reader = new BufferedReader(
                            new InputStreamReader(new FileInputStream(file), charset))) {
                        HostsFileEntriesProvider entries = parse(reader);
                        if (entries != HostsFileEntriesProvider.EMPTY) {
                            return entries;
                        }
                    }
                }
            }
            return HostsFileEntriesProvider.EMPTY;
        }

        @Override
        public HostsFileEntriesProvider parse(Reader reader) throws IOException {
            checkNotNull(reader, "reader");
            try (BufferedReader buff = new BufferedReader(reader)) {
                Map<String, List<InetAddress>> ipv4Entries = new HashMap<>();
                Map<String, List<InetAddress>> ipv6Entries = new HashMap<>();
                String line;
                while ((line = buff.readLine()) != null) {
                    // remove comment
                    int commentPosition = line.indexOf('#');
                    if (commentPosition != -1) {
                        line = line.substring(0, commentPosition);
                    }
                    // skip empty lines
                    line = line.trim();
                    if (line.isEmpty()) {
                        continue;
                    }

                    // split
                    List<String> lineParts = new ArrayList<>();
                    for (String s : WHITESPACES.split(line)) {
                        if (!s.isEmpty()) {
                            lineParts.add(s);
                        }
                    }

                    // a valid line should be [IP, hostname, alias*]
                    if (lineParts.size() < 2) {
                        // skip invalid line
                        continue;
                    }

                    byte[] ipBytes = NetUtil.createByteArrayFromIpAddressString(lineParts.get(0));

Frequently Asked Questions

What is the ParserImpl class?
ParserImpl is a class in the netty codebase, defined in resolver/src/main/java/io/netty/resolver/HostsFileEntriesProvider.java.
Where is ParserImpl defined?
ParserImpl is defined in resolver/src/main/java/io/netty/resolver/HostsFileEntriesProvider.java at line 157.

Analyze Your Own Codebase

Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.

Try Supermodel Free