由于Header类是之前已经分析好的,所以这里直接拿过来就可以了。
之所以之前没有发布这篇博客是因为在学习Header类之前,首先要明白Http首部信息的相关字段及内容,关于这个如果还不太了解请参看 Http首部的字段及相应的取值内容
Header类属性:
//通过字符串数据的方式维护数据,用于实现获取数据的功能。
private final String[] namesAndValues;
Header类只有一个属性,这个属性的含义已表明。
Header类的构造方法
Headers(Builder builder) {
this.namesAndValues = builder.namesAndValues.toArray(new String[builder.namesAndValues.size()]);
}
private Headers(String[] namesAndValues) {
this.namesAndValues = namesAndValues;
}
通过Header类的构造方法我们知道,对于用户来说它是禁止new的。所以实例化该类的方法另有其它。
实例化Header类的方法
//实例化Header并检查传递的数据是否合法,然后设置字符串数组。
public static Headers of(String... namesAndValues) {
if (namesAndValues == null) throw new NullPointerException("namesAndValues == null");
if (namesAndValues.length % 2 != 0) {
throw new IllegalArgumentException("Expected alternating header names and values");
}
namesAndValues = namesAndValues.clone();
for (int i = 0; i < namesAndValues.length; i++) {
if (namesAndValues[i] == null) throw new IllegalArgumentException("Headers cannot be null");
namesAndValues[i] = namesAndValues[i].trim();
}
for (int i = 0; i < namesAndValues.length; i += 2) {
String name = namesAndValues[i];
String value = namesAndValues[i + 1];
if (name.length() == 0 || name.indexOf('\0') != -1 || value.indexOf('\0') != -1) {
throw new IllegalArgumentException("Unexpected header: " + name + ": " + value);
}
}
return new Headers(namesAndValues);
}
//实例化Header类并检查数据的合法性,然后通过Map集合设置字符串数组,
public static Headers of(Map<String, String> headers) {
if (headers == null) throw new NullPointerException("headers == null");
String[] namesAndValues = new String[headers.size() * 2];
int i = 0;
for (Map.Entry<String, String> header : headers.entrySet()) {