当前位置: 首页 > news >正文

北京 工业网站建设公司排名企业网站推广湖南岚鸿推广

北京 工业网站建设公司排名,企业网站推广湖南岚鸿推广,营销型网站制作平台,佛山网站建设格式有哪些回想#xff1a;回想序列化#xff0c;事实上原书的结构非常清晰#xff0c;我截图给出书中的章节结构#xff1a;序列化最基本的#xff0c;最底层的是实现writable接口#xff0c;wiritable规定读和写的游戏规则 #xff08;void write(DataOutput out) throws IOExce… 回想 回想序列化事实上原书的结构非常清晰我截图给出书中的章节结构 序列化最基本的最底层的是实现writable接口wiritable规定读和写的游戏规则 void write(DataOutput out) throws IOException;  void readFields(DataInput in) throws IOException;。为了适应hadoop的mapreduce的运算特性也就是map 和reduce对key的比較排序的功能就要实现Comparable接口这个接口规定 public int compareTo(T o);这种方法。为了增强处理大数据集的能力。我们不能老是先序列化传输反序列化。然后进行比較compare,太消耗时间和性能了。我们有了增强的RawComparatorRawComparator是Comparator的增强版能够比較没有被反序列化的数据。 hadoop须要处理的数据五花八门java具有的基本数据类型都有可能在hadoop中出现hadoop因此包装了java的基本数据类型使他们实现以上的接口而且给予实现细节。这些类都实现了WritableComparable接口。插上飞翔的翅膀能够在不同的hadoop节点之间毫无障碍的传输了。如入无人之境。 既然Text拿出来单独讨论。自然就要好好研究一下Text的实现细节对于我们对hadoop的设计细节和思想太重要太重要。 Text是UTF-8字符串的Writable实现。被看做是java String类型的替换。Text 类取代了UTF8 类 UTF8 类不支持编码大于32767 个字节的字符.使用了Java 改进过的UTF-8.Text 使用int 型(使用一个可变长度的编码方案)在字符感编码中存储字节数. 最大值是2 GB 。此外。 Text 使用标准的UTF芯使其更易于与理解U T F-8 的其它工具协同工作. 为什么是2GB我预计非常少人会思考这个问题我们简单计算一下 利用int存储字节长度int最大是2^31-1那么字节最大长度就是2^31-1 Text可以容纳的大小R2^31-1/1024/1024/10241.999999992GB 因此我们使用他的时候要知道他的大小是有限制的。 因为强调使用标准的UTF8所以Text 和Java 的String 类之间还是有一些差别的。Text 类的索引位于编码后的字节系列中而不是字符串中的Unicode 字符.或Java 的char 编码单元{如同String 一样)。举比例如以下 这方面的差异用中文就非常好的说明这个问题。  String line  滚滚长江东逝水;     System.out.println(line.length());     Text text  new Text(line);     System.out.println(text.getLength());     System.out.println(line.charAt(2));     System.out.println(text.charAt(2)); 输出 7 21 长 -1     String line  merry christmas;     System.out.println(line.length());     Text text  new Text(line);     System.out.println(text.getLength());     System.out.println(line.charAt(2));     System.out.println(text.charAt(2)); 输出 15 15 r 114 能够看出来他们的索引Index)是真的不一样。同一个索引值取出来的并非同一个东西。 注意 charAt ( )返回了一个int 类型来表示Unicode 代码点 而不是像String 变量那样返回一个char 类型。在開始使用一个以上字节进行编码的字符比如中文。 Text 和String 之间的差别是非常明显的。下表展示了Unicode的代码点。 U0041 代码点相应大写字母A 一直到U00DFUTF-8都是一个字节编码。剩下的都是两个字节以上。而对于java最后一行仅仅有最后一个代码点是两个。其它的都是一个字节的。这点区别非常大。 怕非常多人不懂代码点我再解释一下 Unicode 是通用字符编码标准。用于表示文本以供计算机处理。Unicode 提供了一种对多语种文本进行一致编码的方法便于国际文本文件的交换。每一个 Unicode 字符均映射到一个代码点代码点是一个介于 0 和 1,114,111 之间的整数。Unicode 代码点使用 Unnnn 形式的表示法来表示当中 nnnn 是代码点的十六进制数或使用描写叙述代码点的文本字符串来表示。比如小写字母 “a” 能够用 U0061 或文本字符串 LATIN SMALL LETTER A 来表示。 代码点能够使用不同的字符编码方案进行编码。在 Oracle Solaris Unicode 语言环境中使用的是 UTF-8 形式。UTF-8 是 Unicode 的一种可变长度编码形式它透明地保留了 ASCII 字符代码值请參见UTF-8 概述。 代码点就是一个字符在Unicode中相应的编码。 String 的长度是它包含的字符个数 。但Text 对象的长度是其UTF -8 编码的字节数. 相同。 indexOf () 方泣返回一个char 类型的编码单元的索引。find () 方格是字节偏移量.请看样例 Test public void string() throws UnsupportedEncodingException { String s  \u0041\u00DF\u6771\uD801\uDC00; assertThat(s.length(), is(5)); assertThat(s.getBytes(UTF-8).length, is(10)); assertThat(s.indexOf(\u0041), is(0)); assertThat(s.indexOf(\u00DF), is(1)); assertThat(s.indexOf(\u6771), is(2)); assertThat(s.indexOf(\uD801\uDC00), is(3)); assertThat(s.charAt(0), is(\u0041)); assertThat(s.charAt(1), is(\u00DF)); assertThat(s.charAt(2), is(\u6771)); assertThat(s.charAt(3), is(\uD801)); assertThat(s.charAt(4), is(\uDC00)); assertThat(s.codePointAt(0), is(0x0041)); assertThat(s.codePointAt(1), is(0x00DF)); assertThat(s.codePointAt(2), is(0x6771)); assertThat(s.codePointAt(3), is(0x10400)); } Test public void text() { Text t  new Text(\u0041\u00DF\u6771\uD801\uDC00); assertThat(t.getLength(), is(10));   //10  1234 是其UTF -8 编码的字节数   assertThat(t.find(\u0041), is(0)); assertThat(t.find(\u00DF), is(1)); assertThat(t.find(\u6771), is(3)); assertThat(t.find(\uD801\uDC00), is(6)); assertThat(t.charAt(0), is(0x0041)); assertThat(t.charAt(1), is(0x00DF)); assertThat(t.charAt(3), is(0x6771)); assertThat(t.charAt(6), is(0x10400)); } 遍历Text,迭代 迭代使用索引的字节偏移对Text 中的Unicode 字符进行途代是非常复杂的由于你不能仅仅添加索引。迭代的定义有点模糊(见例4-6 ) 将Text 对象变成java.nio.ByteBuffer然后对缓冲的Text 重复调用bytesToCodePoint() 静态方法.这个方泣提取下一个代码点作为int 然后更新缓冲中的位置。当bytesToCodePoint() 返回- 1 时检測到字符结束。意思就是说我们取字符的时候。是一整个一整个字符的取我们不可以依照索引来取我们依照代码点整个整个的取。 public class TextIterator { public static void main(String[] args) {     Text t  new Text(\u0041\u00DF\u6771\uD801\uDC00);     ByteBuffer buf  ByteBuffer.wrap(t.getBytes(), 0, t.getLength());     int cp;     while (buf.hasRemaining()  (cp  Text.bytesToCodePoint(buf)) ! -1) {     System.out.println(Integer.toHexString(cp)); } } } 输出 41 df 6771 10400 可改动性 String 和Text 的还有一个差别在于可改动性(像Hadoop 中的全部Writable 实视一样。但NullWritable 除外后者是单实例对象)。我们能够通过对它调用set() 函数来重用Text 实例。示比例如以下: Text t  new Text(hadoop); t.set(pig); assertThat(t.getLength(), is(3)); assertThat(t.getBytes().length, is(3)); 转为字符串 Text 不像java. l ang.String 一样有一个能够处理字符串的API 所以在很多情况下须要将Text 对象转化为String 对象。这通经常使用toString()方法来完毕。 assertThat(new Text(hadoop ) . toString() , is( hadoop)); BytesWritable BytesWritable 是一个二进制数据数组封装。它的序列化格式是一个int 字段(4字节) 指定的是字节数及字节本身。比如。 一个长度为2 值为3 和5 的字节数组序列化为一个4 字节的整数(00000002)加上两个来自数组的字节(03 和05) 。 BytesWritable b  new BytesWritable(new byte[] { 3, 5 }); byte[] bytes  serialize(b); assertThat(StringUtils.byteToHexString(bytes), is(000000020305)); BytesWritab1e 是可变的。其值可通过调用set ( )方撞来改变。和Text一样 。从getBytes ( )方法返回的字节数组大小可能并没有反映出存储在BytesWritable 的数据的实际大小.能够通过调用getLength () 方法来确定BytesWritable 的长度。比如: b.setCapacity(11); assertThat(b.getLength(), is(2)); assertThat(b.getBytes().length, is(11)); NullWritable NullWritable 是一种特殊的Writable 类型由于它的序列化是零长度的。没有字节被写入流或从流中读出.它被用作占位符.比如在MapReduce 中在不需要这个位置的时候键或值能够被声明为NullWritable他有效存储了一个不变的空值。NullWritable 也能够非常实用在打算存储一系列值的时候作为SequenceFile 的一个键而不是键/值对。它是一个不变的单实例事实上例能够通过调用NullWritable.get() 方法来检索。 今天就到这里。 Charles 2015-12-24晚于P.P 版权说明 本文由Charles Dong原创本人支持开源以及免费故意的传播。反对商业化谋利。 CSDN博客http://blog.csdn.net/mrcharles 个人站http://blog.xingbod.cn EMAILcharlesxingbod.cn 转载于:https://www.cnblogs.com/gccbuaa/p/7055880.html
http://www.pierceye.com/news/612816/

相关文章:

  • 网站初期 权重怎么做彩票类网站开发
  • 南通网站定制公司服务器网站建设维护合同
  • 亳州做商标网站的公司免费的网站模板
  • 西南城乡建设部网站首页python3做网站教程
  • 网站首页设计欣赏个人电影网站建设
  • 导航网站建设怎么给网站图片加alt
  • 备案成功后怎么建设网站宠物喂养网页设计模板以及代码
  • 东莞哪家网站建设比较好wordpress更改语言设置
  • 如何找做网站的客户wordpress适合视频网站吗
  • 网站建设的业务流程图拔萝卜视频播放在线观看免费
  • 建个网站要多少钱高安网站制作
  • dw设计模板百度ocpc如何优化
  • 苏宁网站优化与推广html教程网站
  • 怎么做网站网页免费高清屏幕录像
  • 网络推广哪个网站好亚马逊网站开发使用的什么方式
  • 佛山企业网站建设咨询怎么从零开始做网站
  • dede移动端网站源码中国能建设计公司网站
  • 潍坊网站建设多少钱做网站seo优化
  • 南昌网站建设方案外包怎么自己做网站凑钱
  • 贵州企业展示型网站建设网站建设需要摊销吗
  • 网站建设视频教程广州哪里有正规的技能培训
  • 网站后台iis配置小程序模板消息推送规则
  • 桥梁建设工程网站残疾人网站服务平台
  • 网站开发语言包括哪些潍坊公司注册
  • 平顶山网站制作哪家公司好阿里巴巴网站建设改图片
  • 网站设计培训学校有哪些wordpress主题什么值得买
  • 如皋建设工程局网站静态网站做淘宝客
  • 温州网站建设案例做网站卖衣服物流包年多少钱
  • 响应 网站建设招聘室内设计
  • 网站建设宣传册内容南京个人网站建设