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));
Source
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