Properties的load方法
我们先看一下load方法的源码:
public synchronized void load(InputStream inStream) throws IOException {
load0(new LineReader(inStream));
}
传入了一个输入流,然后调用了load0方法。
再看一下load0方法:
private void load0 (LineReader lr) throws IOException {
char[] convtBuf = new char[1024];
int limit;
int keyLen;
int valueStart;
char c;
boolean hasSep;
boolean precedingBackslash;
while ((limit = lr.readLine()) >= 0) {
c = 0;
keyLen = 0;
valueStart = limit;
hasSep = false;
//System.out.println("line=<" + new String(lineBuf, 0, limit) + ">");
precedingBackslash = false;
while (keyLen < limit) {
c = lr.lineBuf[keyLen];
//need check if escaped.
if ((c == '=' || c == ':') && !precedingBackslash) {
valueStart = keyLen + 1;
hasSep = true;
break;
} else if ((c == ' ' || c == '\t' || c == '\f') && !precedingBackslash) {
valueStart = keyLen + 1;
break;
}
if (c == '\\') {
precedingBackslash = !precedingBackslash;
} else {
precedingBackslash = false;
}
keyLen++;
}
while (valueStart < limit) {
c = lr.lineBuf[valueStart];
if (c != ' ' && c != '\t' && c != '\f') {
if (!hasSep && (c == '=' || c == ':')) {
hasSep = true;
} else {
break;
}
}
valueStart++;
}
String key = loadConvert(lr.lineBuf, 0, keyLen, convtBuf);
String value = loadConvert(lr.lineBuf, valueStart, limit - valueStart, convtBuf);
put(key, value);
}
}
看起来非常长,但是我们也不需要一字一句的看,直接看最后面。
我们都知道,Properties是Map的子类,看最后一句用到了put方法就明白了。
load0方法其实就是逐行读取properties配置文件,分隔成两个字符串key和value,将他们放进Properties对象中。
后面如果需要用到这些值,直接调用Properties对象就可以了。#在找工作求抱抱##你们的毕业论文什么进度了##Java烂大街了#
public synchronized void load(InputStream inStream) throws IOException {
load0(new LineReader(inStream));
}
传入了一个输入流,然后调用了load0方法。
再看一下load0方法:
private void load0 (LineReader lr) throws IOException {
char[] convtBuf = new char[1024];
int limit;
int keyLen;
int valueStart;
char c;
boolean hasSep;
boolean precedingBackslash;
while ((limit = lr.readLine()) >= 0) {
c = 0;
keyLen = 0;
valueStart = limit;
hasSep = false;
//System.out.println("line=<" + new String(lineBuf, 0, limit) + ">");
precedingBackslash = false;
while (keyLen < limit) {
c = lr.lineBuf[keyLen];
//need check if escaped.
if ((c == '=' || c == ':') && !precedingBackslash) {
valueStart = keyLen + 1;
hasSep = true;
break;
} else if ((c == ' ' || c == '\t' || c == '\f') && !precedingBackslash) {
valueStart = keyLen + 1;
break;
}
if (c == '\\') {
precedingBackslash = !precedingBackslash;
} else {
precedingBackslash = false;
}
keyLen++;
}
while (valueStart < limit) {
c = lr.lineBuf[valueStart];
if (c != ' ' && c != '\t' && c != '\f') {
if (!hasSep && (c == '=' || c == ':')) {
hasSep = true;
} else {
break;
}
}
valueStart++;
}
String key = loadConvert(lr.lineBuf, 0, keyLen, convtBuf);
String value = loadConvert(lr.lineBuf, valueStart, limit - valueStart, convtBuf);
put(key, value);
}
}
看起来非常长,但是我们也不需要一字一句的看,直接看最后面。
我们都知道,Properties是Map的子类,看最后一句用到了put方法就明白了。
load0方法其实就是逐行读取properties配置文件,分隔成两个字符串key和value,将他们放进Properties对象中。
后面如果需要用到这些值,直接调用Properties对象就可以了。#在找工作求抱抱##你们的毕业论文什么进度了##Java烂大街了#