我试图理解 Text.readFields()
与 Text.readString()
在 Text
班级。
从javadoc来看,还不是很清楚。唯一的一点提示可能是关于这个 Text.readString()
一定要执行utf-8编码,这在实际实现中很明显
467 /**Read a UTF8 encoded string with a maximum size
468 */
469 public static String readString(DataInput in, int maxLength)
470 throws IOException {
471 int length = WritableUtils.readVIntInRange(in, 0, maxLength);
472 byte [] bytes = new byte[length];
473 in.readFully(bytes, 0, length);
474 return decode(bytes);
475 }
294 public void readFields(DataInput in, int maxLength) throws IOException {
295 int newLength = WritableUtils.readVInt(in);
296 if (newLength < 0) {
297 throw new IOException("tried to deserialize " + newLength +
298 " bytes of data! newLength must be non-negative.");
299 } else if (newLength >= maxLength) {
300 throw new IOException("tried to deserialize " + newLength +
301 " bytes of data, but maxLength = " + maxLength);
302 }
303 readWithKnownLength(in, newLength);
304 }
另一个区别在于方法的签名。 readString()
是静态的,而另一个不是。
现在我有以下疑问:
我还缺什么吗?
据我所知,字符串遵循javaapi中的utf编码标准。什么情况下 readString()
以及 readFields()
有区别吗?换言之,我什么时候应该用一个而不是另一个。
为什么一个是静态的而另一个不是?它有什么区别,什么时候一个应该比另一个在这方面使用 Text
类上下文(类与对象级方法)?
暂无答案!
目前还没有任何答案,快来回答吧!