字节 订阅
字节(Byte )是计算机信息技术用于计量存储容量的一种计量单位,也表示一些计算机编程语言中的数据类型和语言字符 [1]  。一个位节存储8位无符号数,储存的数值范围为0-255。如同字元一样,字节型态的变数只需要用一个位元组(8位元)的内存空间储存 [1]  。 展开全文
字节(Byte )是计算机信息技术用于计量存储容量的一种计量单位,也表示一些计算机编程语言中的数据类型和语言字符 [1]  。一个位节存储8位无符号数,储存的数值范围为0-255。如同字元一样,字节型态的变数只需要用一个位元组(8位元)的内存空间储存 [1]  。
信息
外文名
Byte
定    义
相当于一个字符,8位=1字节
类    型
数字信息的单位
中文名
字节
学    科
计算机
简    写
B
字节简介
字节是二进制数据的单位。一个字节通常8位长。但是,一些老型号计算机结构使用不同的长度。为了避免混乱,在大多数国际文献中,使用词代替byte。在多数的计算机系统中,一个字节是一个8位长的数据单位,大多数的计算机用一个字节表示一个字符、数字或其他字符。一个字节也可以表示一系列二进制位。在一些计算机系统中,4 个字节代表一个字,这是计算机在执行指令时能够有效处理数据的单位。一些语言描述需要2个字节表示一个字符,这叫做双字节字符集。一些处理器能够处理双字节或单字节指令。字节通常简写为“B”,而位通常简写为小写“b”,计算机存储器的大小通常用字节来表示 [2]  。
收起全文
精华内容
下载资源
问答
  • 字节跳动面经汇总

    千次阅读 多人点赞 2020-02-03 23:59:18
    字节跳动面经 【字节跳动】字节跳动-抖音C++开发实习一二面凉经 https://www.nowcoder.com/discuss/342523 【字节跳动】字节跳动后端面经 已拿意向书 https://www.nowcoder.com/discuss/302265 【字节跳动】字节c++...

    字节跳动面经

    【字节跳动】字节跳动-抖音C++开发实习一二面凉经

    https://www.nowcoder.com/discuss/342523

    【字节跳动】字节跳动后端面经 已拿意向书

    https://www.nowcoder.com/discuss/302265

    【字节跳动】字节c++一面

    https://www.nowcoder.com/discuss/298886

    【字节跳动】字节跳动后台开发二面凉经

    https://www.nowcoder.com/discuss/294289

    【字节跳动】头条面经(已拿 offer)

    https://www.nowcoder.com/discuss/294511

    【字节跳动】头条上岸

    https://www.nowcoder.com/discuss/273603

    【字节跳动】字节跳动后台开发方向一面面经

    https://www.nowcoder.com/discuss/273573

    【字节跳动】字节跳动客户端一面凉经

    https://www.nowcoder.com/discuss/267266

    【字节跳动】喜得头条客户端意向书,发一波头条面经

    https://www.nowcoder.com/discuss/258246

    【字节跳动】字节跳动多媒体开发工程师面经,offer已拿

    https://www.nowcoder.com/discuss/254083

    【字节跳动】无实习无比赛无论文成绩中上,喜提字节跳动研发offer

    https://www.nowcoder.com/discuss/245461

    【字节跳动】字节跳动 客户端 一面

    https://www.nowcoder.com/discuss/239378

    【字节跳动】字节跳动 基础架构C++服务端开发面经

    https://www.nowcoder.com/discuss/241129

    【字节跳动】字节跳动客户端研发工程师一面已收感谢信

    https://www.nowcoder.com/discuss/237485

    【字节跳动】字节跳动面经(含一二三面)

    https://www.nowcoder.com/discuss/227808

    【字节跳动】字节后端三面 凉凉夜色为我思念成河

    https://www.nowcoder.com/discuss/227726

    【字节跳动】字节跳动三面凉

    https://www.nowcoder.com/discuss/226803

    【字节跳动】字节跳动一面凉经

    https://www.nowcoder.com/discuss/226609

    【字节跳动】字节跳动一面凉经

    https://www.nowcoder.com/discuss/226600

    【字节跳动】拿到offer了,来牛客还愿

    https://www.nowcoder.com/discuss/219789

    【字节跳动】字节跳动 四面经+祈福

    https://www.nowcoder.com/discuss/219231

    【字节跳动】字节跳动六面凉经

    https://www.nowcoder.com/discuss/218288

    【字节跳动】字节跳动 C++深圳后端 四面面经 意向书已get

    https://www.nowcoder.com/discuss/21736

    【字节跳动】头条后端开发提前批技术面小结(已拿意向性offer)

    https://www.nowcoder.com/discuss/216828

    【字节跳动】字节跳动提前批1-3面面经【已收到意向书】

    https://www.nowcoder.com/discuss/215961

    【字节跳动】字节跳动提前批后端第三面凉经

    https://www.nowcoder.com/discuss/214125

    【字节跳动】【三面】头条后台研发–提前批

    https://www.nowcoder.com/discuss/213481

    【字节跳动】终于等到字节跳动意向书了,实习+秋招共8面

    https://www.nowcoder.com/discuss/213405

    【字节跳动】头条多媒体提前批面经 一二三四面已过,等HR面中,反馈牛油

    https://www.nowcoder.com/discuss/212388

    【字节跳动】字节跳动TOB一二三面面经

    https://www.nowcoder.com/discuss/211598

    【字节跳动】字节终于跳动了!收到提前批意向书了,分享下面经。。。

    https://www.nowcoder.com/discuss/211943

    【字节跳动】字节跳动一,二,三面记录

    https://www.nowcoder.com/discuss/210917

    【字节跳动】字节跳动面筋(EE后台开发)

    https://www.nowcoder.com/discuss/210897

    【字节跳动】字节跳动C++一面凉经

    https://www.nowcoder.com/discuss/210321

    【字节跳动】记录下跳不动公司的二面吧 对于菜鸡来说 确实难啊

    https://www.nowcoder.com/discuss/210169

    【字节跳动】字节二面(凉面)C++ 后端

    https://www.nowcoder.com/discuss/209688

    【字节跳动】头条C++开发二面凉经

    https://www.nowcoder.com/discuss/209636

    【字节跳动】字节跳动提前批后端开发(视频架构)一二三面

    https://www.nowcoder.com/discuss/209548

    【字节跳动】字节跳动 后端提前批一面凉经

    https://www.nowcoder.com/discuss/207096

    【字节跳动】字节跳动 ee后台的一面凉经

    https://www.nowcoder.com/discuss/206763

    【字节跳动】头条多媒体开发工程师 提前批面试题

    https://www.nowcoder.com/discuss/206742

    【字节跳动】字节 后端 一面凉经

    https://www.nowcoder.com/discuss/207326

    【字节跳动】头条C++ 一二面凉经

    https://www.nowcoder.com/discuss/207322

    【字节跳动】字节跳动 C++后端 一面 面经

    https://www.nowcoder.com/discuss/207260

    【字节跳动】字节提前批后端开发-视频架构方向面经

    https://www.nowcoder.com/discuss/207891

    【字节跳动】字节跳动 效率工程EE 后台一二面凉经

    https://www.nowcoder.com/discuss/207720

    【字节跳动】头条互娱 后端 一面二面

    https://www.nowcoder.com/discuss/208374

    【字节跳动】字节跳动提前批toB 一面面经

    https://www.nowcoder.com/discuss/208276

    【字节跳动】字节跳动C++研发工程师(三面全通过)

    https://www.nowcoder.com/discuss/208173

    【字节跳动】字节跳动 互娱后端一面

    https://www.nowcoder.com/discuss/208161

    【字节跳动】字节跳动-视频架构-后端开发(视频一面)

    https://www.nowcoder.com/discuss/208773

    【字节跳动】字节跳动 互娱 C++ 一面

    https://www.nowcoder.com/discuss/208969

    【字节跳动】字节跳动C++提前批一面面经

    https://www.nowcoder.com/discuss/206156

    【字节跳动】字节跳动 C++开发工程师 面经

    https://www.nowcoder.com/discuss/206522

    【字节跳动】字节跳动提前批后台开发一面凉经

    https://www.nowcoder.com/discuss/206520

    【字节跳动】字节后台开发一面

    https://www.nowcoder.com/discuss/206489

    【字节跳动】字节跳动,刚刚出炉的C++一面凉经

    https://www.nowcoder.com/discuss/206425

    【字节跳动】字节跳动游戏研发三面面经

    https://www.nowcoder.com/discuss/205845

    【字节跳动】字节跳动 成都效率工程后端C++提前批三面凉面

    https://www.nowcoder.com/discuss/205353

    【字节跳动】字节跳动系统架构组实习生一二面凉经

    https://www.nowcoder.com/discuss/203548

    【字节跳动】字节跳动后端提前批

    https://www.nowcoder.com/discuss/204112

    【字节跳动】头条一面面经

    https://www.nowcoder.com/discuss/203998

    【字节跳动】字节跳动 成都效率工程后端C++提前批三面凉面

    https://www.nowcoder.com/discuss/205353

    【字节跳动】秋招之路:个人历程以及面经总结

    https://www.nowcoder.com/discuss/344311

    【字节跳动】上岸字节跳动,回馈牛客

    https://www.nowcoder.com/discuss/341120

    【字节跳动】头条 三面面经

    https://www.nowcoder.com/discuss/330800

    【字节跳动】字节面经,美团,网易,招银,360全部在HR前一面挂

    https://www.nowcoder.com/discuss/317874

    【字节跳动】北京字节跳动游戏JAVA游戏服务器回馈一下攒人品

    https://www.nowcoder.com/discuss/308109

    【字节跳动】字节跳动Java后端视频面一面凉经

    https://www.nowcoder.com/discuss/302831

    【字节跳动】字节后端开发面经

    https://www.nowcoder.com/discuss/301301

    【字节跳动】鏖战四小时之—字节跳动后台开发面经

    https://www.nowcoder.com/discuss/294526

    【字节跳动】字节跳动刚刚出炉的面经(一面后台)

    https://www.nowcoder.com/discuss/272833

    【字节跳动】字节跳动后台面经攒人品

    https://www.nowcoder.com/discuss/265748

    【字节跳动】字节跳动-后端开发-面经

    https://www.nowcoder.com/discuss/262576

    【字节跳动】回馈牛客 字节跳动上岸面经

    https://www.nowcoder.com/discuss/258803

    【字节跳动】字节客户端一面凉经

    https://www.nowcoder.com/discuss/254986

    【字节跳动】字节一二面凉拌面筋

    https://www.nowcoder.com/discuss/251049

    【字节跳动】字节跳动二面凉经

    https://www.nowcoder.com/discuss/241393

    【字节跳动】【字节跳动】后端开发三轮面经

    https://www.nowcoder.com/discuss/241356

    【字节跳动】字节跳动-客户端开发-一二三面经-顺便offer许愿

    https://www.nowcoder.com/discuss/236298

    【字节跳动】字节后台三面面经

    https://www.nowcoder.com/discuss/226817

    【字节跳动】2020字节跳动春招客户端开发岗面经

    https://www.nowcoder.com/discuss/225697

    【字节跳动】头条一面记录

    https://www.nowcoder.com/discuss/226623

    【字节跳动】字节二面凉

    https://www.nowcoder.com/discuss/226654

    【字节跳动】字节跳动后端三轮面经

    https://www.nowcoder.com/discuss/226626

    【字节跳动】头条二面面经(攒人品别给挂啊)

    https://www.nowcoder.com/discuss/221898

    【字节跳动】迟了几天的字节跳动面经

    https://www.nowcoder.com/discuss/221324

    【字节跳动】字节跳动提前批后端开发

    https://www.nowcoder.com/discuss/220896

    【字节跳动】字节跳动提前批一二三面面经(效率工程后台开发)

    https://www.nowcoder.com/discuss/218847

    【字节跳动】终于收到意向书了…字节跳动1、2、3面面经 回馈牛油

    https://www.nowcoder.com/discuss/218173

    【字节跳动】头条后端开发面经(已拿意向书)

    https://www.nowcoder.com/discuss/217672

    【字节跳动】补发字节面经(或者说经验总结)

    https://www.nowcoder.com/discuss/216588

    【字节跳动】字节跳动java后台已上岸,发个面经回馈牛油

    https://www.nowcoder.com/discuss/215891

    【字节跳动】头条提前批后台三面面经(已拿offer)

    https://www.nowcoder.com/discuss/215003

    【字节跳动】字节跳动提前批后台研发四面面经 (offer到手)

    https://www.nowcoder.com/discuss/214906

    【字节跳动】字节跳动三面面经,已offer

    https://www.nowcoder.com/discuss/213984

    【字节跳动】头条提前批后端,刚拿到意向书,分享面经还愿

    https://www.nowcoder.com/discuss/213834

    【字节跳动】还好没放弃,终于等到你,字节跳动

    https://www.nowcoder.com/discuss/212790

    【字节跳动】字节跳动实习3面offer+全职3面offer面经

    https://www.nowcoder.com/discuss/211591

    【字节跳动】字节跳动成都研发中心秋招提前批123面面经(已收到意向书)

    https://www.nowcoder.com/discuss/210836

    【字节跳动】字节跳动 三面面经 已收到感谢信

    https://www.nowcoder.com/discuss/210512

    【字节跳动】字节跳动后端提前批二面凉

    https://www.nowcoder.com/discuss/207144

    【字节跳动】字节 后端 一面凉经

    https://www.nowcoder.com/discuss/207065

    【字节跳动】头条深圳后端提前批一面凉经

    https://www.nowcoder.com/discuss/207046

    【字节跳动】字节跳动提前批后端两面面经

    https://www.nowcoder.com/discuss/207290

    【字节跳动】头条java后端提前批一面凉经

    https://www.nowcoder.com/discuss/207272

    【字节跳动】字节跳动Java后台一面面经

    https://www.nowcoder.com/discuss/207262

    【字节跳动】字节跳动 后台 日常实习 一面/二面/HR面

    https://www.nowcoder.com/discuss/207681

    【字节跳动】头条后台开发面经

    https://www.nowcoder.com/discuss/207911

    【字节跳动】头条后端一轮游面经

    https://www.nowcoder.com/discuss/207815

    【字节跳动】头条4面面经

    https://www.nowcoder.com/discuss/207789

    【字节跳动】技术面试前半段基础知识答得不好,为什么还要接着问算法题

    https://www.nowcoder.com/discuss/207765

    【字节跳动】字节跳动 后台 日常实习 一面/二面/HR面

    https://www.nowcoder.com/discuss/207681

    【字节跳动】字节跳动 一面

    https://www.nowcoder.com/discuss/208398

    【字节跳动】字节跳动提前批凉经

    https://www.nowcoder.com/discuss/208201

    【字节跳动】字节跳动-----一面。

    https://www.nowcoder.com/discuss/206436

    【字节跳动】头条提前批Java后端工程师面经

    https://www.nowcoder.com/discuss/206411

    【字节跳动】抖音上海后台开发提前批一二面面经(已约三面)

    https://www.nowcoder.com/discuss/205630

    【字节跳动】头条一面二面

    https://www.nowcoder.com/discuss/203548

    【字节跳动】字节跳动提前批后台一面经验

    https://www.nowcoder.com/discuss/203216

    【字节跳动】字节游戏服务端一面,被虐惨

    https://www.nowcoder.com/discuss/203697

    【字节跳动】热呼呼的头条面经(已拿offer)

    https://www.nowcoder.com/discuss/203760

    【字节跳动】字节跳动data部门一面二面面经

    https://www.nowcoder.com/discuss/204097

    【字节跳动】【java】头条提前批一面(2019-07-07)

    https://www.nowcoder.com/discuss/203984

    【字节跳动】字节跳动-提前批-Java后台 - 一面面经(QAQ)

    https://www.nowcoder.com/discuss/204596

    【字节跳动】字节跳动data后端一面面经

    https://www.nowcoder.com/discuss/204325

    【字节跳动】字节跳动-提前批-Java后台 - 一面面经(QAQ)

    https://www.nowcoder.com/discuss/204596

    【字节跳动】头条后端一面凉经

    https://www.nowcoder.com/discuss/205034

    【字节跳动】头条一面 后台研发

    https://www.nowcoder.com/discuss/206371

    【字节跳动】字节安全岗面经

    https://www.nowcoder.com/discuss/300650

    【字节跳动】字节跳动【效率工程】–大三寒假日常实习面经【共二面】

    https://www.nowcoder.com/discuss/351860

    【字节跳动】面字节跳动体验

    https://www.nowcoder.com/discuss/351710

    【字节跳动】头条客户端一面凉经

    https://www.nowcoder.com/discuss/336075

    【字节跳动】字节跳动(宇宙条)客户端一面“虐经”

    https://www.nowcoder.com/discuss/323864

    【字节跳动】字节跳动客户端一、二面➕三面凉经

    https://www.nowcoder.com/discuss/309832

    【字节跳动】头条ios开发 一面C++

    https://www.nowcoder.com/discuss/306888

    【字节跳动】字节跳动客户端二面

    https://www.nowcoder.com/discuss/304089

    【字节跳动】字节跳动客户端一面

    https://www.nowcoder.com/discuss/302181

    【字节跳动】字节安卓社招面经来啦

    https://www.nowcoder.com/discuss/302228

    【字节跳动】字节跳动客户端一面凉经

    https://www.nowcoder.com/discuss/301854

    【字节跳动】双非本科非科班 抖音Android面筋(被调剂到iOS了)

    https://www.nowcoder.com/discuss/300246

    【字节跳动】字节客户端收到意向书,回馈牛客

    https://www.nowcoder.com/discuss/297454

    【字节跳动】字节跳动客户端上岸-面试惨经-学习总结

    https://www.nowcoder.com/discuss/292087

    【字节跳动】字节安卓开发一二三hr面面经,赠送春招实习面经

    https://www.nowcoder.com/discuss/276777

    【字节跳动】发个字节客户端二面的面经攒个人品,求三面呀!!!

    https://www.nowcoder.com/discuss/271338

    【字节跳动】字节跳动 客户端 一面

    https://www.nowcoder.com/discuss/274412

    【字节跳动】字节跳动客户端一面二面面经

    https://www.nowcoder.com/discuss/261875

    【字节跳动】字节跳动 - 客户端逆向工程 一面凉分享

    https://www.nowcoder.com/discuss/257669

    【字节跳动】字节跳动android开发面经,求offer call

    https://www.nowcoder.com/discuss/251554

    【字节跳动】字节跳动客户端三轮面试

    https://www.nowcoder.com/discuss/244867

    【字节跳动】字节跳动android:一面二面凉经

    https://www.nowcoder.com/discuss/244006

    【字节跳动】拿到offer喵回来还愿

    https://www.nowcoder.com/discuss/218234

    【字节跳动】回馈牛客!【深圳字节跳动】ios移动端已拿意向书

    https://www.nowcoder.com/discuss/212124

    【字节跳动】字节跳动提前批 凉经

    https://www.nowcoder.com/discuss/210532

    【字节跳动】字节跳动提前批两面凉经

    https://www.nowcoder.com/discuss/207880

    【字节跳动】字节跳动效率工程提前批Android实习面经

    https://www.nowcoder.com/discuss/208452

    【字节跳动】字节跳动Android一面凉经。。

    https://www.nowcoder.com/discuss/205830

    【字节跳动】补发:字节跳动安卓开发实习三轮面经

    https://www.nowcoder.com/discuss/203703

    【字节跳动】字节跳动,Android开发提前批,新鲜面经

    https://www.nowcoder.com/discuss/204840

    【字节跳动】头条提前批安卓岗面经

    https://www.nowcoder.com/discuss/204672

    【字节跳动】字节跳动测试开发–二面面经

    https://www.nowcoder.com/discuss/351722

    【字节跳动】字节跳动头条研发—测试开发一面面经

    https://www.nowcoder.com/discuss/351378

    【字节跳动】字节跳动测试开发一面面经

    https://www.nowcoder.com/discuss/348347

    【字节跳动】字节跳动,测试工程师面经

    https://www.nowcoder.com/discuss/344652

    【字节跳动】字节测开实习一面(视频面)

    https://www.nowcoder.com/discuss/341318

    【字节跳动】字节跳动-互娱研发-测试工程师

    https://www.nowcoder.com/discuss/326346

    【字节跳动】字节 测开 三面 凉经

    https://www.nowcoder.com/discuss/317807

    【字节跳动】还愿字节+测试面经

    https://www.nowcoder.com/discuss/311344

    【字节跳动】字节跳动测试开发内推(实习生/秋招)

    https://www.nowcoder.com/discuss/302486

    【字节跳动】字节测开1-4面面经(收到意向书)

    https://www.nowcoder.com/discuss/304858

    【字节跳动】字节跳动测试开发工程师三次面试凉经

    https://www.nowcoder.com/discuss/298626

    【字节跳动】字节跳动测试工程师-头条研发面经

    https://www.nowcoder.com/discuss/299077

    【字节跳动】字节跳动测试开发(测开)一、二、三技术面经

    https://www.nowcoder.com/discuss/289856

    【字节跳动】字节跳动,客户端测试开发岗一面

    https://www.nowcoder.com/discuss/275572

    【字节跳动】字节跳动一二面凉经

    https://www.nowcoder.com/discuss/226825

    【字节跳动】测开面经

    https://www.nowcoder.com/discuss/214526

    【字节跳动】【还愿】头条提前批测开面经

    https://www.nowcoder.com/discuss/213349

    【字节跳动】2019.07字节跳动 测试开发技术面

    https://www.nowcoder.com/discuss/213808

    【字节跳动】字节提前批测试开发三面

    https://www.nowcoder.com/discuss/210***

    【字节跳动】字节跳动提前批测开劝退一面面经

    https://www.nowcoder.com/discuss/207520

    【字节跳动】抖音火山测开凉经

    https://www.nowcoder.com/discuss/208097

    【字节跳动】回馈一下牛客网(字节跳动测试开发一二面凉经)

    https://www.nowcoder.com/discuss/209199

    【字节跳动】回馈一下牛客网(字节跳动测试开发一二面凉经)

    https://www.nowcoder.com/discuss/209199

    【字节跳动】字节跳动凉经(一、二、三+boss(hr)面)

    https://www.nowcoder.com/discuss/205655

    【字节跳动】2019字节跳动秋招提前批测试开发岗一面

    https://www.nowcoder.com/discuss/203384

    【字节跳动】面经:字节跳动测试开发提前批面经

    https://www.nowcoder.com/discuss/203453

    【字节跳动】字节跳动 游戏测开一二三面面经

    https://www.nowcoder.com/discuss/204117

    【字节跳动】字节跳动游戏测试开发二面凉经

    https://www.nowcoder.com/discuss/204107

    【字节跳动】字节跳动游戏提前批-杭州-测开三面

    https://www.nowcoder.com/discuss/204318

    【字节跳动】字节跳动 测试开发提前批一二面

    https://www.nowcoder.com/discuss/205153

    【字节跳动】字节跳动测试提前批一面

    https://www.nowcoder.com/discuss/203485

    【字节跳动】字节跳动 测试一面凉经

    https://www.nowcoder.com/discuss/205286

    【字节跳动】头条测试工程师一面

    https://www.nowcoder.com/discuss/205092

    【字节跳动】字节跳动产品实习面经

    https://www.nowcoder.com/discuss/350965

    【字节跳动】字节商业化产品实习面经,在线许愿

    https://www.nowcoder.com/discuss/347555

    【字节跳动】字节商产实习生面经

    https://www.nowcoder.com/discuss/334799

    【字节跳动】字节跳动TOB产品经理面经

    https://www.nowcoder.com/discuss/326692

    【字节跳动】字节国际化商业产品经理凉经

    https://www.nowcoder.com/discuss/296958

    【字节跳动】字节跳动商业产品四面面经分享

    https://www.nowcoder.com/discuss/293827

    【字节跳动】字节电商用户产品面经|两岗六面,意向书已发

    https://www.nowcoder.com/discuss/278351

    【字节跳动】许愿字节跳动offer顺利到来【已拿意向书,补面经还愿】

    https://www.nowcoder.com/discuss/276657

    【字节跳动】字节跳动商业产品经理3面面经(许愿offer)

    https://www.nowcoder.com/discuss/275344

    【字节跳动】字节跳动商业产品运营经理三面面经

    https://www.nowcoder.com/discuss/232127

    【字节跳动】字节跳动b端产品经理面经

    https://www.nowcoder.com/discuss/228910

    【字节跳动】字节跳动产品运营面经(已完成一二三面 许愿意向书)

    https://www.nowcoder.com/discuss/226872

    【字节跳动】许愿字节!分享1-5面面经

    https://www.nowcoder.com/discuss/345650

    【字节跳动】头条大数据开发三面面经

    https://www.nowcoder.com/discuss/341617

    【字节跳动】头条大数据开发面经

    https://www.nowcoder.com/discuss/284368

    【字节跳动】字节跳动一二面凉经

    https://www.nowcoder.com/discuss/242036

    【字节跳动】字节跳动大数据一面凉经

    https://www.nowcoder.com/discuss/226685

    【字节跳动】字节跳动大数据工程师二面凉经

    https://www.nowcoder.com/discuss/226652

    【字节跳动】头条提前批三轮面试终于结束了

    https://www.nowcoder.com/discuss/212794

    【字节跳动】字节跳动(提前批)二面凉经

    https://www.nowcoder.com/discuss/210332

    【字节跳动】字节跳动大数据岗

    https://www.nowcoder.com/discuss/204836

    【字节跳动】字节跳动提前批 大数据面经 = =

    https://www.nowcoder.com/discuss/204677

    【字节跳动】字节跳动游戏品牌管理面经分享

    https://www.nowcoder.com/discuss/210907

    【字节跳动】还愿牛客。字节跳动广告媒介

    https://www.nowcoder.com/discuss/333586

    【字节跳动】抖音后台开发社招2面凉经

    https://www.nowcoder.com/discuss/346051

    【字节跳动】字节跳动 后端开发 二面凉经

    https://www.nowcoder.com/discuss/343393

    【字节跳动】字节跳动后端实习面试(全程超越附体)

    https://www.nowcoder.com/discuss/338849

    【字节跳动】今日头条 后端 社招

    https://www.nowcoder.com/discuss/325907

    【字节跳动】秋招上岸,附面经,感谢!

    https://www.nowcoder.com/discuss/325567

    【字节跳动】字节跳动后台面经

    https://www.nowcoder.com/discuss/310712

    【字节跳动】头条一面凉经(后台开发)

    https://www.nowcoder.com/discuss/307162

    【字节跳动】字节跳动后端开发面试

    https://www.nowcoder.com/discuss/293766

    【字节跳动】【字节】后端一面

    https://www.nowcoder.com/discuss/280129

    【字节跳动】字节跳动效率工程后端三面凉经

    https://www.nowcoder.com/discuss/277817

    【字节跳动】字节跳动研发二面面经

    https://www.nowcoder.com/discuss/259363

    【字节跳动】字节跳动一二面面经【后端】

    https://www.nowcoder.com/discuss/250449

    【字节跳动】字节跳动一二三面面经

    https://www.nowcoder.com/discuss/241769

    【字节跳动】字节后端一面凉经

    https://www.nowcoder.com/discuss/241250

    【字节跳动】字节跳动 后端开发 一、二、三面 面经

    https://www.nowcoder.com/discuss/236551

    【字节跳动】字节跳动后端开发实习生凉经

    https://www.nowcoder.com/discuss/213918

    【字节跳动】字节跳动 后台开发 三面面经(base北京)许愿中

    https://www.nowcoder.com/discuss/211285

    【字节跳动】字节跳动后端一面凉经

    https://www.nowcoder.com/discuss/209668

    【字节跳动】头条后台意向书get,还愿

    https://www.nowcoder.com/discuss/210068

    【字节跳动】字节跳动后端二面凉经

    https://www.nowcoder.com/discuss/209793

    【字节跳动】字节跳不动后端面经

    https://www.nowcoder.com/discuss/208742

    【字节跳动】字节跳动后端开发一面凉

    https://www.nowcoder.com/discuss/208946

    【字节跳动】字节跳动 提前批面经

    https://www.nowcoder.com/discuss/209088

    【字节跳动】字节跳动,toB,一面

    https://www.nowcoder.com/discuss/207756

    【字节跳动】字节跳动互娱面经

    https://www.nowcoder.com/discuss/206351

    【字节跳动】头条后端实习二面面经 7/14

    https://www.nowcoder.com/discuss/206633

    【字节跳动】头条一面 后台研发

    https://www.nowcoder.com/discuss/206371

    【字节跳动】后端开发二面凉经QAQ

    https://www.nowcoder.com/discuss/203652

    【字节跳动】字节跳动ee后台提前批面试

    https://www.nowcoder.com/discuss/203583

    【字节跳动】190705字节跳动效率工程EE后端一面面经

    https://www.nowcoder.com/discuss/203488

    【字节跳动】字节跳动教学服务质检下个月入职~

    https://www.nowcoder.com/discuss/347591

    【字节跳动】字节跳动-效率工程 一二三面面筋 + 前端笔记分享

    https://www.nowcoder.com/discuss/337035

    【字节跳动】字节跳动前端面经

    https://www.nowcoder.com/discuss/308745

    【字节跳动】字节跳动-头条研发 前端一二面凉

    https://www.nowcoder.com/discuss/294450

    【字节跳动】头条抖音散招前端凉经

    https://www.nowcoder.com/discuss/286453

    【字节跳动】字节跳动前端一面凉经

    https://www.nowcoder.com/discuss/279144

    【字节跳动】「前端」19年第一次面试 面筋 攒人品 许愿顺利

    https://www.nowcoder.com/discuss/276007

    【字节跳动】字节前端一面

    https://www.nowcoder.com/discuss/274438

    【字节跳动】字节跳动 前端面经

    https://www.nowcoder.com/discuss/268116

    【字节跳动】首次面试字节跳动两面凉经,菜鸟一个,勿喷。

    https://www.nowcoder.com/discuss/227853

    【字节跳动】字节跳动两次凉经

    https://www.nowcoder.com/discuss/226994

    【字节跳动】字节跳动前端一面凉经

    https://www.nowcoder.com/discuss/226798

    【字节跳动】字节前端一面凉经

    https://www.nowcoder.com/discuss/226691

    【字节跳动】字节跳动前端面经, 已拿意向书

    https://www.nowcoder.com/discuss/213424

    【字节跳动】字节跳动 深圳抖音 提前批前端 三面+HR面 已拿意向书

    https://www.nowcoder.com/discuss/213863

    【字节跳动】字节跳动 提前批 凉经

    https://www.nowcoder.com/discuss/212855

    【字节跳动】抖音前端凉经

    https://www.nowcoder.com/discuss/212448

    【字节跳动】字节跳动提前批前端,已拿意向书

    https://www.nowcoder.com/discuss/210817

    【字节跳动】字节跳动提前批前端一面凉经

    https://www.nowcoder.com/discuss/210083

    【字节跳动】字节跳动 互娱 前端一面凉经

    https://www.nowcoder.com/discuss/207553

    【字节跳动】字节跳动ToB业务前端提前批一面凉面

    https://www.nowcoder.com/discuss/207409

    【字节跳动】字节跳动提前批前端三面面经

    https://www.nowcoder.com/discuss/208384

    【字节跳动】字节跳动提前批前端3面+HR面 面经

    https://www.nowcoder.com/discuss/208931

    【字节跳动】字节前端一面凉经

    https://www.nowcoder.com/discuss/206457

    【字节跳动】字节跳动游戏平台 前端三面凉经

    https://www.nowcoder.com/discuss/205511

    【字节跳动】字节跳动提前批前端岗一面面经

    https://www.nowcoder.com/discuss/205969

    【字节跳动】字节跳动提前批前端岗一面面经

    https://www.nowcoder.com/discuss/205969

    【字节跳动】字节跳动to B提前批前端一面(攒个人品)

    https://www.nowcoder.com/discuss/203874

    【字节跳动】记一次字节跳动前端面试,四轮技术面通过,已拿offer

    https://www.nowcoder.com/discuss/204314

    【字节跳动】字节跳动一面总结(前端技术岗)

    https://www.nowcoder.com/discuss/204829

    【字节跳动】字节跳动招聘岗面经

    https://www.nowcoder.com/discuss/350141

    【字节跳动】字节跳动HRBP笔经+面经

    https://www.nowcoder.com/discuss/339430

    【字节跳动】面经:字节跳动 薪酬福利绩效顾问 校招 已面二轮

    https://www.nowcoder.com/discuss/335200

    【字节跳动】字节跳动-HRBP招聘方向-1、2面经

    https://www.nowcoder.com/discuss/317754

    【字节跳动】字节跳动国际化HRBP一面二面面经

    https://www.nowcoder.com/discuss/289014

    【字节跳动】字节跳动五面面经-顺便许愿offer

    https://www.nowcoder.com/discuss/307002

    【字节跳动】字节 数据分析面经

    https://www.nowcoder.com/discuss/344423

    【字节跳动】字节跳动数据分析一面、二面面经(已凉)

    https://www.nowcoder.com/discuss/322985

    【字节跳动】字节跳动 数据分析 10月的offer 部分面经

    https://www.nowcoder.com/discuss/322770

    【字节跳动】攒人品贴 - 字节/头条数据分析面试一面二面

    https://www.nowcoder.com/discuss/314832

    【字节跳动】字节跳动 数据分析二面 面试已完成?(附简单面经)

    https://www.nowcoder.com/discuss/301369

    【字节跳动】字节跳动数据分析一面

    https://www.nowcoder.com/discuss/267795

    【字节跳动】字节跳动_数据分析:一面:0828凉凉

    https://www.nowcoder.com/discuss/236629

    【字节跳动】字节跳动 数据分析 一面

    https://www.nowcoder.com/discuss/230722

    【字节跳动】字节跳动数据分析一面凉经…

    https://www.nowcoder.com/discuss/219080

    【字节跳动】字节跳动秋招 数据分析 一面

    https://www.nowcoder.com/discuss/219004

    【字节跳动】字节跳动数分凉面

    https://www.nowcoder.com/discuss/212382

    【字节跳动】字节跳动 数据分析 产品方向 日常实习 面经

    https://www.nowcoder.com/discuss/207493

    【字节跳动】头条一面二面Data后端(一首凉凉送给自己)

    https://www.nowcoder.com/discuss/205742

    【字节跳动】回报牛客:发一下字节算法工程师面经,时间久了只能发个大概。

    https://www.nowcoder.com/discuss/330565

    【字节跳动】十面字节跳动,老哥们节日快乐

    https://www.nowcoder.com/discuss/324100

    【字节跳动】字节跳动——机器人算法工程师(视频面试)

    https://www.nowcoder.com/discuss/323272

    【字节跳动】字节跳动效率工程团队 算法实习生 一面凉经

    https://www.nowcoder.com/discuss/311673

    【字节跳动】字节cv一面凉经

    https://www.nowcoder.com/discuss/285880

    【字节跳动】字节跳动 ai lab cv工程师

    https://www.nowcoder.com/discuss/239350

    【字节跳动】字节跳动三面(凉)

    https://www.nowcoder.com/discuss/241121

    【字节跳动】还愿,顺便附上头条面筋

    https://www.nowcoder.com/discuss/238718

    【字节跳动】字节跳动 头条 算法 面经 已拿offer意向书

    https://www.nowcoder.com/discuss/235500

    【字节跳动】字节跳动-ailab-视觉算法面经

    https://www.nowcoder.com/discuss/229358

    【字节跳动】字节跳动算法岗一二面面经

    https://www.nowcoder.com/discuss/227743

    【字节跳动】字节跳动算法工程师岗一二三面经

    https://www.nowcoder.com/discuss/226960

    【字节跳动】字节跳动算法二面凉经

    https://www.nowcoder.com/discuss/226706

    【字节跳动】字节二面凉经

    https://www.nowcoder.com/discuss/226657

    【字节跳动】字节跳动面试一面凉凉

    https://www.nowcoder.com/discuss/226622

    【字节跳动】字节跳动算法岗一面凉经

    https://www.nowcoder.com/discuss/226619

    【字节跳动】头条提前批算法面经(2技术面+1leader面)

    https://www.nowcoder.com/discuss/220966

    【字节跳动】头条南京后端上岸

    https://www.nowcoder.com/discuss/218650

    【字节跳动】收到头条意向书,分享一点面经

    https://www.nowcoder.com/discuss/217326

    【字节跳动】字节跳动ailab面经

    https://www.nowcoder.com/discuss/216993

    【字节跳动】字节跳动 算法 已拿意向书

    https://www.nowcoder.com/discuss/216672

    【字节跳动】字节跳动算法岗提前批面经

    https://www.nowcoder.com/discuss/215883

    【字节跳动】字节跳动提前批ailab面经

    https://www.nowcoder.com/discuss/215858

    【字节跳动】头条算法提前批三面面经

    https://www.nowcoder.com/discuss/213671

    【字节跳动】字节跳动AI lab 三面记录

    https://www.nowcoder.com/discuss/213726

    【字节跳动】字节跳动,二面问题

    https://www.nowcoder.com/discuss/212922

    【字节跳动】字节跳动,提前批一面问题

    https://www.nowcoder.com/discuss/212913

    【字节跳动】还愿,收到字节跳动提前批算法岗offer了

    https://www.nowcoder.com/discuss/212439

    【字节跳动】回馈牛客,字节算法三面许愿求offer

    https://www.nowcoder.com/discuss/211763

    【字节跳动】深圳抖音图像图形算法三面面经(已获意向书)

    https://www.nowcoder.com/discuss/211382

    【字节跳动】字节AiLab CV 面经,感觉凉透了

    https://www.nowcoder.com/discuss/211352

    【字节跳动】字节跳动 AILab 二面记录

    https://www.nowcoder.com/discuss/211174

    【字节跳动】字节跳动提前批后端,刚拿意向书,分享一下面经

    https://www.nowcoder.com/discuss/210872

    【字节跳动】字节跳动计算机视觉算法面经

    https://www.nowcoder.com/discuss/210829

    【字节跳动】[字节跳动/头条] 算法提前批三轮面经,前来回馈广大牛油们

    https://www.nowcoder.com/discuss/210036

    【字节跳动】字节跳动2020届提前批 AI Lab cv 三面视频面

    https://www.nowcoder.com/discuss/210508

    【字节跳动】字节跳动 图像图像一面面经

    https://www.nowcoder.com/discuss/207221

    【字节跳动】字节跳动算法岗三面面经

    https://www.nowcoder.com/discuss/207105

    【字节跳动】字节跳动提前批算法工程师面经

    https://www.nowcoder.com/discuss/207092

    【字节跳动】OPPO视频面(NLP算法),凉经

    https://www.nowcoder.com/discuss/206740

    【字节跳动】头条抖音互娱-图形图像一二三面

    https://www.nowcoder.com/discuss/207369

    【字节跳动】字节跳动头条研发算法一面

    https://www.nowcoder.com/discuss/207317

    【字节跳动】算法岗提前批凉经【字节跳动+京东】

    https://www.nowcoder.com/discuss/207287

    【字节跳动】字节跳动一面凉经!

    https://www.nowcoder.com/discuss/207749

    【字节跳动】头条 机器学习算法一面

    https://www.nowcoder.com/discuss/207712

    【字节跳动】头条AILab一面面经

    https://www.nowcoder.com/discuss/208289

    【字节跳动】头条后台二面面经

    https://www.nowcoder.com/discuss/208881

    【字节跳动】字节跳动算法工程师面经+个人疑问

    https://www.nowcoder.com/discuss/209478

    【字节跳动】字节跳动 AILab提前批算法工程师面经(已收到offer)

    https://www.nowcoder.com/discuss/206226

    【字节跳动】字节跳动CV算法一面凉经

    https://www.nowcoder.com/discuss/206593

    【字节跳动】今日头条 多媒体开发(视频架构)面经

    https://www.nowcoder.com/discuss/206578

    【字节跳动】【字节跳动算法岗提前批1+2视频面】趁热分享

    https://www.nowcoder.com/discuss/205964

    【字节跳动】头条图形图像一面面筋

    https://www.nowcoder.com/discuss/205864

    【字节跳动】字节跳动ai lab cv算法面经(我来反馈攒人品了)

    https://www.nowcoder.com/discuss/205843

    【字节跳动】字节跳动 Data 算法工程师 广告/AML 提前批3面面经

    https://www.nowcoder.com/discuss/205736

    【字节跳动】说说自己的字节跳动EE部门一面凉经,以及面试官给我的三连击!

    https://www.nowcoder.com/discuss/206106

    【字节跳动】头条算法最新凉经

    https://www.nowcoder.com/discuss/206065

    【字节跳动】【字节跳动算法岗提前批1+2视频面】趁热分享

    https://www.nowcoder.com/discuss/205964

    【字节跳动】记一次十分惨烈的头条一面

    https://www.nowcoder.com/discuss/203454

    【字节跳动】头条机器学习算法岗面试记录

    https://www.nowcoder.com/discuss/205260

    【字节跳动】字节跳动游戏策划一二三面凉经

    https://www.nowcoder.com/discuss/279872

    【字节跳动】字节跳动游戏策划一二三面凉经

    https://www.nowcoder.com/discuss/279872

    【字节跳动】字节跳动游戏一面

    https://www.nowcoder.com/discuss/238857

    【字节跳动】游戏品牌管理 1/2/3/Hr面凉经

    https://www.nowcoder.com/discuss/206466

    【字节跳动】字节跳动游戏策划面经

    https://www.nowcoder.com/discuss/205817

    【字节跳动】字节跳动游戏策划一面面经

    https://www.nowcoder.com/discuss/203613

    【字节跳动】写面经攒人品,字节跳动游戏策划base 上海

    https://www.nowcoder.com/discuss/203837

    【字节跳动】提前批 游戏策划 面经

    https://www.nowcoder.com/discuss/204079

    【字节跳动】字节跳动游戏策划一面面经

    https://www.nowcoder.com/discuss/203950

    【字节跳动】游戏策划 数值+系统+战斗方向 三面 面经

    https://www.nowcoder.com/discuss/204180

    【字节跳动】字节跳动游戏策划三面面经

    https://www.nowcoder.com/discuss/204302

    【字节跳动】(也写个面经攒攒人品)字节跳动北京游策电面三连

    https://www.nowcoder.com/discuss/204216

    【字节跳动】字节跳动游戏研发(上海) 日常实习上岸分享

    https://www.nowcoder.com/discuss/349091

    【字节跳动】字节跳动 游戏开发一面凉经

    https://www.nowcoder.com/discuss/239589

    【字节跳动】字节跳动游戏引擎开发凉经

    https://www.nowcoder.com/discuss/233959

    【字节跳动】头条游戏研发一面面经

    https://www.nowcoder.com/discuss/225617

    【字节跳动】字节跳动游戏研发 一面凉经

    https://www.nowcoder.com/discuss/224569

    【字节跳动】游戏研发提前批——已收到意向书

    https://www.nowcoder.com/discuss/212360

    【字节跳动】已拿意向书-字节跳动杭州游戏研发面经

    https://www.nowcoder.com/discuss/211678

    【字节跳动】字节跳动游戏研发(已拿意向书)

    https://www.nowcoder.com/discuss/211390

    【字节跳动】字节跳动游戏研发二面凉经

    https://www.nowcoder.com/discuss/206603

    【字节跳动】字节跳动游戏研发一二三面

    https://www.nowcoder.com/discuss/203881

    【字节跳动】字节跳动 提前批 游戏开发 一面就凉

    https://www.nowcoder.com/discuss/203803

    【字节跳动】字节跳动游戏研发三面面经

    https://www.nowcoder.com/discuss/203781

    【字节跳动】字节跳动——上海——游戏引擎岗三面

    https://www.nowcoder.com/discuss/203777

    【字节跳动】字节跳动 游戏战略分析 一面面经 许愿二面

    https://www.nowcoder.com/discuss/317090

    【字节跳动】字节跳动商业化运营管培生面经

    https://www.nowcoder.com/discuss/324886

    【字节跳动】字节跳动商业化运营管培 base成都 三面过经

    https://www.nowcoder.com/discuss/291433

    【字节跳动】字节跳动游戏提前批游戏运营管理面经(3面+HR)

    https://www.nowcoder.com/discuss/210136

    【字节跳动】字节跳动商业化营销策划一面面经-base厦门la分公司

    https://www.nowcoder.com/discuss/299516

    展开全文
  • 【Java基础-3】吃透Java IO:字节流、字符流、缓冲流

    万次阅读 多人点赞 2020-09-23 20:12:33
    什么是Java-IO?字符流和字节流的区别与适用场景是什么?缓冲流到底实现了什么?如何高效地读写文件? 本文用大量的示例图和实例,带你吃透Java IO。

    前言

    有人曾问fastjson的作者(阿里技术专家高铁):“你开发fastjson,没得到什么好处,反而挨了骂背了锅,这种事情你为什么要做呢?”

    高铁答道:“因为热爱本身,就是奖励啊!”

    这个回答顿时触动了我。想想自己,又何尝不是如此。写作是个痛苦的过程,用心写作就更加煎熬,需字字斟酌,反复删改才有所成。然而,当一篇篇精良文章出自己手而呈现眼前时,那些痛苦煎熬就都那么值得。如果这些博文能有幸得大家阅读和认可,就更加是莫大的鼓舞了。技术人的快乐就是可以这么纯粹和简单。

    点波关注不迷路,一键三连好运连连!

    IO流是Java中的一个重要构成部分,也是我们经常打交道的。这篇关于Java IO的博文干货满满,堪称全网前三(请轻喷!)

    下面几个问题(问题还会继续补充),如果你能对答如流,那么恭喜你,IO知识掌握得很好,可以立即关闭文章。反之,你可以在后面得文章中寻找答案。

    1. Java IO流有什么特点?
    2. Java IO流分为几种类型?
    3. 字节流和字符流的关系与区别?
    4. 字符流是否使用了缓冲?
    5. 缓冲流的效率一定高吗?为什么?
    6. 缓冲流体现了Java中的哪种设计模式思想?
    7. 为什么要实现序列化?如何实现序列化?
    8. 序列化数据后,再次修改类文件,读取数据会出问题,如何解决呢?

    1 初识Java IO

    IO,即inout,也就是输入和输出,指应用程序和外部设备之间的数据传递,常见的外部设备包括文件、管道、网络连接。

    Java 中是通过流处理IO 的,那么什么是流

    流(Stream),是一个抽象的概念,是指一连串的数据(字符或字节),是以先进先出的方式发送信息的通道。

    当程序需要读取数据的时候,就会开启一个通向数据源的流,这个数据源可以是文件,内存,或是网络连接。类似的,当程序需要写入数据的时候,就会开启一个通向目的地的流。这时候你就可以想象数据好像在这其中“流”动一样。

    一般来说关于流的特性有下面几点:

    1. 先进先出:最先写入输出流的数据最先被输入流读取到。
    2. 顺序存取:可以一个接一个地往流中写入一串字节,读出时也将按写入顺序读取一串字节,不能随机访问中间的数据。(RandomAccessFile除外)
    3. 只读或只写:每个流只能是输入流或输出流的一种,不能同时具备两个功能,输入流只能进行读操作,对输出流只能进行写操作。在一个数据传输通道中,如果既要写入数据,又要读取数据,则要分别提供两个流。

    1.1 IO流分类

    IO流主要的分类方式有以下3种:

    1. 按数据流的方向:输入流、输出流
    2. 按处理数据单位:字节流、字符流
    3. 按功能:节点流、处理流

    在这里插入图片描述

    1、输入流与输出流

    输入与输出是相对于应用程序而言的,比如文件读写,读取文件是输入流,写文件是输出流,这点很容易搞反。

    在这里插入图片描述
    2、字节流与字符流

    字节流和字符流的用法几乎完成全一样,区别在于字节流和字符流所操作的数据单元不同,字节流操作的单元是数据单元是8位的字节,字符流操作的是数据单元为16位的字符。

    为什么要有字符流?

    Java中字符是采用Unicode标准,Unicode 编码中,一个英文字母或一个中文汉字为两个字节。
    在这里插入图片描述
    而在UTF-8编码中,一个中文字符是3个字节。例如下面图中,“云深不知处”5个中文对应的是15个字节:-28-70-111-26-73-79-28-72-115-25-97-91-27-92-124
    在这里插入图片描述

    那么问题来了,如果使用字节流处理中文,如果一次读写一个字符对应的字节数就不会有问题,一旦将一个字符对应的字节分裂开来,就会出现乱码了。为了更方便地处理中文这些字符,Java就推出了字符流。

    字节流和字符流的其他区别:

    1. 字节流一般用来处理图像、视频、音频、PPT、Word等类型的文件。字符流一般用于处理纯文本类型的文件,如TXT文件等,但不能处理图像视频等非文本文件。用一句话说就是:字节流可以处理一切文件,而字符流只能处理纯文本文件。
    2. 字节流本身没有缓冲区,缓冲字节流相对于字节流,效率提升非常高。而字符流本身就带有缓冲区,缓冲字符流相对于字符流效率提升就不是那么大了。详见文末效率对比。

    以写文件为例,我们查看字符流的源码,发现确实有利用到缓冲区:
    在这里插入图片描述
    在这里插入图片描述

    3、节点流和处理流

    节点流:直接操作数据读写的流类,比如FileInputStream

    处理流:对一个已存在的流的链接和封装,通过对数据进行处理为程序提供功能强大、灵活的读写功能,例如BufferedInputStream(缓冲字节流)

    处理流和节点流应用了Java的装饰者设计模式。

    下图就很形象地描绘了节点流和处理流,处理流是对节点流的封装,最终的数据处理还是由节点流完成的。
    在这里插入图片描述
    在诸多处理流中,有一个非常重要,那就是缓冲流

    我们知道,程序与磁盘的交互相对于内存运算是很慢的,容易成为程序的性能瓶颈。减少程序与磁盘的交互,是提升程序效率一种有效手段。缓冲流,就应用这种思路:普通流每次读写一个字节,而缓冲流在内存中设置一个缓存区,缓冲区先存储足够的待操作数据后,再与内存或磁盘进行交互。这样,在总数据量不变的情况下,通过提高每次交互的数据量,减少了交互次数。
    在这里插入图片描述

    联想一下生活中的例子,我们搬砖的时候,一块一块地往车上装肯定是很低效的。我们可以使用一个小推车,先把砖装到小推车上,再把这小推车推到车前,把砖装到车上。这个例子中,小推车可以视为缓冲区,小推车的存在,减少了我们装车次数,从而提高了效率。
    在这里插入图片描述
    需要注意的是,缓冲流效率一定高吗?不一定,某些情形下,缓冲流效率反而更低,具体请见IO流效率对比。

    完整的IO分类图如下:
    在这里插入图片描述

    1.2 案例实操

    接下来,我们看看如何使用Java IO。

    文本读写的例子,也就是文章开头所说的,将“松下问童子,言师采药去。只在此山中,云深不知处。”写入本地文本,然后再从文件读取内容并输出到控制台。

    1、FileInputStream、FileOutputStream(字节流)

    字节流的方式效率较低,不建议使用

    public class IOTest {
    	public static void main(String[] args) throws IOException {
    		File file = new File("D:/test.txt");
    
    		write(file);
    		System.out.println(read(file));
    	}
    
    	public static void write(File file) throws IOException {
    		OutputStream os = new FileOutputStream(file, true);
    
    		// 要写入的字符串
    		String string = "松下问童子,言师采药去。只在此山中,云深不知处。";
    		// 写入文件
    		os.write(string.getBytes());
    		// 关闭流
    		os.close();
    	}
    
    	public static String read(File file) throws IOException {
    		InputStream in = new FileInputStream(file);
    
    		// 一次性取多少个字节
    		byte[] bytes = new byte[1024];
    		// 用来接收读取的字节数组
    		StringBuilder sb = new StringBuilder();
    		// 读取到的字节数组长度,为-1时表示没有数据
    		int length = 0;
    		// 循环取数据
    		while ((length = in.read(bytes)) != -1) {
    			// 将读取的内容转换成字符串
    			sb.append(new String(bytes, 0, length));
    		}
    		// 关闭流
    		in.close();
    
    		return sb.toString();
    	}
    }
    

    2、BufferedInputStream、BufferedOutputStream(缓冲字节流)

    缓冲字节流是为高效率而设计的,真正的读写操作还是靠FileOutputStreamFileInputStream,所以其构造方法入参是这两个类的对象也就不奇怪了。

    public class IOTest {
    
    	public static void write(File file) throws IOException {
    		// 缓冲字节流,提高了效率
    		BufferedOutputStream bis = new BufferedOutputStream(new FileOutputStream(file, true));
    
    		// 要写入的字符串
    		String string = "松下问童子,言师采药去。只在此山中,云深不知处。";
    		// 写入文件
    		bis.write(string.getBytes());
    		// 关闭流
    		bis.close();
    	}
    
    	public static String read(File file) throws IOException {
    		BufferedInputStream fis = new BufferedInputStream(new FileInputStream(file));
    
    		// 一次性取多少个字节
    		byte[] bytes = new byte[1024];
    		// 用来接收读取的字节数组
    		StringBuilder sb = new StringBuilder();
    		// 读取到的字节数组长度,为-1时表示没有数据
    		int length = 0;
    		// 循环取数据
    		while ((length = fis.read(bytes)) != -1) {
    			// 将读取的内容转换成字符串
    			sb.append(new String(bytes, 0, length));
    		}
    		// 关闭流
    		fis.close();
    
    		return sb.toString();
    	}
    }
    

    3、InputStreamReader、OutputStreamWriter(字符流)

    字符流适用于文本文件的读写OutputStreamWriter类其实也是借助FileOutputStream类实现的,故其构造方法是FileOutputStream的对象

    public class IOTest {
    	
    	public static void write(File file) throws IOException {
    		// OutputStreamWriter可以显示指定字符集,否则使用默认字符集
    		OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream(file, true), "UTF-8");
    
    		// 要写入的字符串
    		String string = "松下问童子,言师采药去。只在此山中,云深不知处。";
    		osw.write(string);
    		osw.close();
    	}
    
    	public static String read(File file) throws IOException {
    		InputStreamReader isr = new InputStreamReader(new FileInputStream(file), "UTF-8");
    		// 字符数组:一次读取多少个字符
    		char[] chars = new char[1024];
    		// 每次读取的字符数组先append到StringBuilder中
    		StringBuilder sb = new StringBuilder();
    		// 读取到的字符数组长度,为-1时表示没有数据
    		int length;
    		// 循环取数据
    		while ((length = isr.read(chars)) != -1) {
    			// 将读取的内容转换成字符串
    			sb.append(chars, 0, length);
    		}
    		// 关闭流
    		isr.close();
    
    		return sb.toString()
    	}
    }
    

    4、字符流便捷类

    Java提供了FileWriterFileReader简化字符流的读写,new FileWriter等同于new OutputStreamWriter(new FileOutputStream(file, true))

    public class IOTest {
    	
    	public static void write(File file) throws IOException {
    		FileWriter fw = new FileWriter(file, true);
    
    		// 要写入的字符串
    		String string = "松下问童子,言师采药去。只在此山中,云深不知处。";
    		fw.write(string);
    		fw.close();
    	}
    
    	public static String read(File file) throws IOException {
    		FileReader fr = new FileReader(file);
    		// 一次性取多少个字节
    		char[] chars = new char[1024];
    		// 用来接收读取的字节数组
    		StringBuilder sb = new StringBuilder();
    		// 读取到的字节数组长度,为-1时表示没有数据
    		int length;
    		// 循环取数据
    		while ((length = fr.read(chars)) != -1) {
    			// 将读取的内容转换成字符串
    			sb.append(chars, 0, length);
    		}
    		// 关闭流
    		fr.close();
    
    		return sb.toString();
    	}
    }
    

    5、BufferedReader、BufferedWriter(字符缓冲流)

    public class IOTest {
    	
    	public static void write(File file) throws IOException {
    		// BufferedWriter fw = new BufferedWriter(new OutputStreamWriter(new
    		// FileOutputStream(file, true), "UTF-8"));
    		// FileWriter可以大幅度简化代码
    		BufferedWriter bw = new BufferedWriter(new FileWriter(file, true));
    
    		// 要写入的字符串
    		String string = "松下问童子,言师采药去。只在此山中,云深不知处。";
    		bw.write(string);
    		bw.close();
    	}
    
    	public static String read(File file) throws IOException {
    		BufferedReader br = new BufferedReader(new FileReader(file));
    		// 用来接收读取的字节数组
    		StringBuilder sb = new StringBuilder();
    
    		// 按行读数据
    		String line;
    		// 循环取数据
    		while ((line = br.readLine()) != null) {
    			// 将读取的内容转换成字符串
    			sb.append(line);
    		}
    		// 关闭流
    		br.close();
    
    		return sb.toString();
    	}
    }
    

    2 IO流对象

    第一节中,我们大致了解了IO,并完成了几个案例,但对IO还缺乏更详细的认知,那么接下来我们就对Java IO细细分解,梳理出完整的知识体系来。

    Java种提供了40多个类,我们只需要详细了解一下其中比较重要的就可以满足日常应用了。

    2.1 File类

    File类是用来操作文件的类,但它不能操作文件中的数据。

    public class File extends Object implements Serializable, Comparable<File>
    

    File类实现了SerializableComparable<File>,说明它是支持序列化和排序的。

    File类的构造方法

    方法名说明
    File(File parent, String child)根据 parent 抽象路径名和 child 路径名字符串创建一个新 File 实例。
    File(String pathname)通过将给定路径名字符串转换为抽象路径名来创建一个新 File 实例。
    File(String parent, String child)根据 parent 路径名字符串和 child 路径名字符串创建一个新 File 实例。
    File(URI uri)通过将给定的 file: URI 转换为一个抽象路径名来创建一个新的 File 实例。

    File类的常用方法

    方法说明
    createNewFile()当且仅当不存在具有此抽象路径名指定名称的文件时,不可分地创建一个新的空文件。
    delete()删除此抽象路径名表示的文件或目录。
    exists()测试此抽象路径名表示的文件或目录是否存在。
    getAbsoluteFile()返回此抽象路径名的绝对路径名形式。
    getAbsolutePath()返回此抽象路径名的绝对路径名字符串。
    length()返回由此抽象路径名表示的文件的长度。
    mkdir()创建此抽象路径名指定的目录。

    File类使用实例

    public class FileTest {
    	public static void main(String[] args) throws IOException {
    		File file = new File("C:/Mu/fileTest.txt");
    
    		// 判断文件是否存在
    		if (!file.exists()) {
    			// 不存在则创建
    			file.createNewFile();
    		}
    		System.out.println("文件的绝对路径:" + file.getAbsolutePath());
    		System.out.println("文件的大小:" + file.length());
    
    		// 刪除文件
    		file.delete();
    	}
    }
    

    2.2 字节流

    InputStreamOutputStream是两个抽象类,是字节流的基类,所有具体的字节流实现类都是分别继承了这两个类。

    InputStream为例,它继承了Object,实现了Closeable

    public abstract class InputStream
    extends Object
    implements Closeable
    

    InputStream类有很多的实现子类,下面列举了一些比较常用的:
    在这里插入图片描述
    详细说明一下上图中的类:

    1. InputStreamInputStream是所有字节输入流的抽象基类,前面说过抽象类不能被实例化,实际上是作为模板而存在的,为所有实现类定义了处理输入流的方法。
    2. FileInputSream:文件输入流,一个非常重要的字节输入流,用于对文件进行读取操作。
    3. PipedInputStream:管道字节输入流,能实现多线程间的管道通信。
    4. ByteArrayInputStream:字节数组输入流,从字节数组(byte[])中进行以字节为单位的读取,也就是将资源文件都以字节的形式存入到该类中的字节数组中去。
    5. FilterInputStream:装饰者类,具体的装饰者继承该类,这些类都是处理类,作用是对节点类进行封装,实现一些特殊功能。
    6. DataInputStream:数据输入流,它是用来装饰其它输入流,作用是“允许应用程序以与机器无关方式从底层输入流中读取基本 Java 数据类型”。
    7. BufferedInputStream:缓冲流,对节点流进行装饰,内部会有一个缓存区,用来存放字节,每次都是将缓存区存满然后发送,而不是一个字节或两个字节这样发送,效率更高。
    8. ObjectInputStream:对象输入流,用来提供对基本数据或对象的持久存储。通俗点说,也就是能直接传输对象,通常应用在反序列化中。它也是一种处理流,构造器的入参是一个InputStream的实例对象。

    OutputStream类继承关系图:
    在这里插入图片描述

    OutputStream类继承关系与InputStream类似,需要注意的是PrintStream.

    2.3 字符流

    与字节流类似,字符流也有两个抽象基类,分别是ReaderWriter。其他的字符流实现类都是继承了这两个类。

    Reader为例,它的主要实现子类如下图:
    在这里插入图片描述
    各个类的详细说明:

    1. InputStreamReader:从字节流到字符流的桥梁(InputStreamReader构造器入参是FileInputStream的实例对象),它读取字节并使用指定的字符集将其解码为字符。它使用的字符集可以通过名称指定,也可以显式给定,或者可以接受平台的默认字符集。
    2. BufferedReader:从字符输入流中读取文本,设置一个缓冲区来提高效率。BufferedReader是对InputStreamReader的封装,前者构造器的入参就是后者的一个实例对象。
    3. FileReader:用于读取字符文件的便利类,new FileReader(File file)等同于new InputStreamReader(new FileInputStream(file, true),"UTF-8"),但FileReader不能指定字符编码和默认字节缓冲区大小。
    4. PipedReader :管道字符输入流。实现多线程间的管道通信。
    5. CharArrayReader:从Char数组中读取数据的介质流。
    6. StringReader :从String中读取数据的介质流。

    WriterReader结构类似,方向相反,不再赘述。唯一有区别的是,Writer的子类PrintWriter

    2.4 序列化

    待续…

    3 IO流方法

    3.1 字节流方法

    字节输入流InputStream主要方法:

    • read() :从此输入流中读取一个数据字节。
    • read(byte[] b) :从此输入流中将最多 b.length 个字节的数据读入一个 byte 数组中。
    • read(byte[] b, int off, int len) :从此输入流中将最多 len 个字节的数据读入一个 byte 数组中。
    • close():关闭此输入流并释放与该流关联的所有系统资源。

    字节输出流OutputStream主要方法:

    • write(byte[] b) :将 b.length 个字节从指定 byte 数组写入此文件输出流中。
    • write(byte[] b, int off, int len) :将指定 byte 数组中从偏移量 off 开始的 len 个字节写入此文件输出流。
    • write(int b) :将指定字节写入此文件输出流。
    • close() :关闭此输入流并释放与该流关联的所有系统资源。

    3.2 字符流方法

    字符输入流Reader主要方法:

    • read():读取单个字符。
    • read(char[] cbuf) :将字符读入数组。
    • read(char[] cbuf, int off, int len) : 将字符读入数组的某一部分。
    • read(CharBuffer target) :试图将字符读入指定的字符缓冲区。
    • flush() :刷新该流的缓冲。
    • close() :关闭此流,但要先刷新它。

    字符输出流Writer主要方法:

    • write(char[] cbuf) :写入字符数组。
    • write(char[] cbuf, int off, int len) :写入字符数组的某一部分。
    • write(int c) :写入单个字符。
    • write(String str) :写入字符串。
    • write(String str, int off, int len) :写入字符串的某一部分。
    • flush() :刷新该流的缓冲。
    • close() :关闭此流,但要先刷新它。

    另外,字符缓冲流还有两个独特的方法:

    • BufferedWriternewLine()写入一个行分隔符。这个方法会自动适配所在系统的行分隔符。
    • BufferedReaderreadLine() :读取一个文本行。

    4 附加内容

    4.1 位、字节、字符

    字节(Byte)是计量单位,表示数据量多少,是计算机信息技术用于计量存储容量的一种计量单位,通常情况下一字节等于八位。

    字符(Character)计算机中使用的字母、数字、字和符号,比如’A’、‘B’、’$’、’&'等。

    一般在英文状态下一个字母或字符占用一个字节,一个汉字用两个字节表示。

    字节与字符:

    • ASCII 码中,一个英文字母(不分大小写)为一个字节,一个中文汉字为两个字节。
    • UTF-8 编码中,一个英文字为一个字节,一个中文为三个字节。
    • Unicode 编码中,一个英文为一个字节,一个中文为两个字节。
    • 符号:英文标点为一个字节,中文标点为两个字节。例如:英文句号 . 占1个字节的大小,中文句号 。占2个字节的大小。
    • UTF-16 编码中,一个英文字母字符或一个汉字字符存储都需要 2 个字节(Unicode 扩展区的一些汉字存储需要 4 个字节)。
    • UTF-32 编码中,世界上任何字符的存储都需要 4 个字节。

    4.2 IO流效率对比

    首先,对比下普通字节流和缓冲字节流的效率:

    public class MyTest {
    	public static void main(String[] args) throws IOException {
    		File file = new File("C:/Mu/test.txt");
    		StringBuilder sb = new StringBuilder();
    
    		for (int i = 0; i < 3000000; i++) {
    			sb.append("abcdefghigklmnopqrstuvwsyz");
    		}
    		byte[] bytes = sb.toString().getBytes();
    
    		long start = System.currentTimeMillis();
    		write(file, bytes);
    		long end = System.currentTimeMillis();
    
    		long start2 = System.currentTimeMillis();
    		bufferedWrite(file, bytes);
    		long end2 = System.currentTimeMillis();
    
    		System.out.println("普通字节流耗时:" + (end - start) + " ms");
    		System.out.println("缓冲字节流耗时:" + (end2 - start2) + " ms");
    
    	}
    
    	// 普通字节流
    	public static void write(File file, byte[] bytes) throws IOException {
    		OutputStream os = new FileOutputStream(file);
    		os.write(bytes);
    		os.close();
    	}
    
    	// 缓冲字节流
    	public static void bufferedWrite(File file, byte[] bytes) throws IOException {
    		BufferedOutputStream bo = new BufferedOutputStream(new FileOutputStream(file));
    		bo.write(bytes);
    		bo.close();
    	}
    }
    

    运行结果:

    普通字节流耗时:250 ms
    缓冲字节流耗时:268 ms
    

    这个结果让我大跌眼镜,不是说好缓冲流效率很高么?要知道为什么,只能去源码里找答案了。翻看字节缓冲流的write方法:

    public synchronized void write(byte b[], int off, int len) throws IOException {
        if (len >= buf.length) {
            /* If the request length exceeds the size of the output buffer,
               flush the output buffer and then write the data directly.
               In this way buffered streams will cascade harmlessly. */
            flushBuffer();
            out.write(b, off, len);
            return;
        }
        if (len > buf.length - count) {
            flushBuffer();
        }
        System.arraycopy(b, off, buf, count, len);
        count += len;
    }
    

    注释里说得很明白:如果请求长度超过输出缓冲区的大小,刷新输出缓冲区,然后直接写入数据。这样,缓冲流将无害地级联。

    但是,至于为什么这么设计,我没有想明白,有哪位明白的大佬可以留言指点一下。

    基于上面的情形,要想对比普通字节流和缓冲字节流的效率差距,就要避免直接读写较长的字符串,于是,设计了下面这个对比案例:用字节流和缓冲字节流分别复制文件。

    public class MyTest {
    	public static void main(String[] args) throws IOException {
    		File data = new File("C:/Mu/data.zip");
    		File a = new File("C:/Mu/a.zip");
    		File b = new File("C:/Mu/b.zip");
    
    		StringBuilder sb = new StringBuilder();
    
    		long start = System.currentTimeMillis();
    		copy(data, a);
    		long end = System.currentTimeMillis();
    
    		long start2 = System.currentTimeMillis();
    		bufferedCopy(data, b);
    		long end2 = System.currentTimeMillis();
    
    		System.out.println("普通字节流耗时:" + (end - start) + " ms");
    		System.out.println("缓冲字节流耗时:" + (end2 - start2) + " ms");
    	}
    
    	// 普通字节流
    	public static void copy(File in, File out) throws IOException {
    		// 封装数据源
    		InputStream is = new FileInputStream(in);
    		// 封装目的地
    		OutputStream os = new FileOutputStream(out);
    		
    		int by = 0;
    		while ((by = is.read()) != -1) {
    			os.write(by);
    		}
    		is.close();
    		os.close();
    	}
    
    	// 缓冲字节流
    	public static void bufferedCopy(File in, File out) throws IOException {
    		// 封装数据源
    		BufferedInputStream bi = new BufferedInputStream(new FileInputStream(in));
    		// 封装目的地
    		BufferedOutputStream bo = new BufferedOutputStream(new FileOutputStream(out));
    		
    		int by = 0;
    		while ((by = bi.read()) != -1) {
    			bo.write(by);
    		}
    		bo.close();
    		bi.close();
    	}
    }
    

    运行结果:

    普通字节流耗时:184867 ms
    缓冲字节流耗时:752 ms
    

    这次,普通字节流和缓冲字节流的效率差异就很明显了,达到了245倍。

    再看看字符流和缓冲字符流的效率对比:

    public class IOTest {
    	public static void main(String[] args) throws IOException {
    		// 数据准备
    		dataReady();
    
    		File data = new File("C:/Mu/data.txt");
    		File a = new File("C:/Mu/a.txt");
    		File b = new File("C:/Mu/b.txt");
    		File c = new File("C:/Mu/c.txt");
    
    		long start = System.currentTimeMillis();
    		copy(data, a);
    		long end = System.currentTimeMillis();
    
    		long start2 = System.currentTimeMillis();
    		copyChars(data, b);
    		long end2 = System.currentTimeMillis();
    
    		long start3 = System.currentTimeMillis();
    		bufferedCopy(data, c);
    		long end3 = System.currentTimeMillis();
    
    		System.out.println("普通字节流1耗时:" + (end - start) + " ms,文件大小:" + a.length() / 1024 + " kb");
    		System.out.println("普通字节流2耗时:" + (end2 - start2) + " ms,文件大小:" + b.length() / 1024 + " kb");
    		System.out.println("缓冲字节流耗时:" + (end3 - start3) + " ms,文件大小:" + c.length() / 1024 + " kb");
    	}
    
    	// 普通字符流不使用数组
    	public static void copy(File in, File out) throws IOException {
    		Reader reader = new FileReader(in);
    		Writer writer = new FileWriter(out);
    
    		int ch = 0;
    		while ((ch = reader.read()) != -1) {
    			writer.write((char) ch);
    		}
    		reader.close();
    		writer.close();
    	}
    
    	// 普通字符流使用字符流
    	public static void copyChars(File in, File out) throws IOException {
    		Reader reader = new FileReader(in);
    		Writer writer = new FileWriter(out);
    
    		char[] chs = new char[1024];
    		while ((reader.read(chs)) != -1) {
    			writer.write(chs);
    		}
    		reader.close();
    		writer.close();
    	}
    
    	// 缓冲字符流
    	public static void bufferedCopy(File in, File out) throws IOException {
    		BufferedReader br = new BufferedReader(new FileReader(in));
    		BufferedWriter bw = new BufferedWriter(new FileWriter(out));
    
    		String line = null;
    		while ((line = br.readLine()) != null) {
    			bw.write(line);
    			bw.newLine();
    			bw.flush();
    		}
    
    		// 释放资源
    		bw.close();
    		br.close();
    	}
    
    	// 数据准备
    	public static void dataReady() throws IOException {
    		StringBuilder sb = new StringBuilder();
    		for (int i = 0; i < 600000; i++) {
    			sb.append("abcdefghijklmnopqrstuvwxyz");
    		}
    		OutputStream os = new FileOutputStream(new File("C:/Mu/data.txt"));
    		os.write(sb.toString().getBytes());
    
    		os.close();
    		System.out.println("完毕");
    	}
    }
    

    运行结果:

    普通字符流1耗时:1337 ms,文件大小:15234 kb
    普通字符流2耗时:82 ms,文件大小:15235 kb
    缓冲字符流耗时:205 ms,文件大小:15234 kb
    

    测试多次,结果差不多,可见字符缓冲流效率上并没有明显提高,我们更多的是要使用它的readLine()newLine()方法。

    4.3 NIO

    待续…

    展开全文
  • 字节字节字节 相互转换

    热门讨论 2011-06-22 17:50:03
    包括了基本的单字节、多字节、双字节之间的相互转换。如果想对版本升级及学习可以参考。(从他人文章中下载的,希望没有侵权)。
  • 一般一个16位(双字节)的数据,比如 FF1A(16进制) 那么高位字节就是FF,低位是1A 如果是32位的数据,比如3F68415B 高位字(不是字节)是3F68 低位字是415B 右边是低位位,左边是高位 C语言中的高位字节和...

    一般一个16位(双字节)的数据,比如 FF1A  (16进制)
    那么高位字节就是FF,低位是1A

    如果是32位的数据,比如  3F68415B
    高位字(不是字节)是3F68
    低位字是415B

    右边是低位位,左边是高位

     

    C语言中的高位字节和低位字节是什么意思?

    通常我们从最高有效位(most significant digit)开始自左向右书写一个数字。在理解有效位这个概念时,可以想象一下你的支票数额的第一位增加1和最后一位增加1之间的巨大区别,前者肯定会让你喜出望外。

    计算机内存中一个字节的位相当于二进制数的位,这意味着最低有效位表示1,倒数第二个有效位表示2×1或2,倒数第三个有效位表示2×2×1或4,依此类推。如果用内存中的两个字节表示一个16位的数,那么其中的一个字节将存放最低的8位有效位,而另一个字节将存放最高的8位有效位,见图10.5。存放最低的8位有效位的字节被称为最低有效位字节或低位字节,而存放最高的8位有效位的字节被称为最高有效位字节或高位字节。
                高位字节                       低位字节
      ↓------------------------------↓    ↓-----------------------------↓           
     
    15  14  13  12  11  10  9.  8.  7.  6.  5.  4.  3.  2.  1.  0. 

     

    16位和32位的数是怎样存储的

     

    一个16位的数占两个字节的存储空间,即高位字节和低位字节(见10.5中的介绍)。如果你是在纸上书写一个16位的数,你总是会把高位字节写在前面,而把低位字节写在后面。然而,当这个数被存储到内存中时,并没有固定的存储顺序。

    如果我们用M和L分别表示高位字节和低位字节,那么可以有两种方式把这两个字节存储到内存中,即M在前L在后或者L在前M在后。把M存储在前的顺序被称为“正向(forward)”或“高位优先(big—endian)”顺序;把L存储在前的顺序被称为“逆向(reverse)”或“低位优先(little—endian)”顺序。

    big—endian这个术语的含义是数的“高位(big end)”存储在前,同时这也是对《Gulliver'sTravels》这本书中的一个词的引用,在该书中big—endian一词是指那些从大头开始吃一个煮鸡蛋的人。

    大多数计算机按正向顺序存储一个数,Intel CPU按逆向顺序存储一个数,因此,如果试图将基于Intel CPU的计算机连到其它类型的计算机上,就可能会引起混乱。

    一个32位的数占4个字节的存储空间,如果我们按有效位从高到低的顺序,分别用Mm,Ml,Lm和Ll表示这4个字节,那么可以有4!(4的阶乘,即24)种方式来存储这些字节。在过去的这些年中,人们在设计计算机时,几乎用遍了这24种方式。然而,时至今天,只有两种方式是最流行的,一种是(Mm,MI,Lm,LD,也就是高位优先顺序,另一种是(Ll,Lm,Ml,Mm),也就是低位优先顺序。和存储16位的数一样,大多数计算机按高位优先顺序存储32位的数,但基于Intel CPU的计算机按低位优先顺序存储32位的数。

    高低字节序转换

    在Linux和Windows网络编程时需要用到htons和htonl函数,用来将主机字节顺序转换为网络字节顺序。

         在Intel机器下,执行以下程序

    int main()
    ...{
       printf("%d /n",htons(16));
          return 0;
    }
    得到的结果是4096,初一看感觉很怪。

        解释如下,数字16的16进制表示为0x0010,数字4096的16进制表示为0x1000。 由于Intel机器是小尾端,存储数字16时实际顺序为1000,存储4096时实际顺序为0010。因此在发送网络包时为了报文中数据为0010,需要经过htons进行字节转换。如果用IBM等大尾端机器,则没有这种字节顺序转换,但为了程序的可移植性,也最好用这个函数。

       另外用注意,数字所占位数小于或等于一个字节(8 bits)时,不要用htons转换。这是因为对于主机来说,大小尾端的最小单位为字节(byte)。

     

    Part 2: 大小端模式


    不同的CPU有不同的字节序类型 这些字节序是指整数在内存中保存的顺序 这个叫做主机序 
    最常见的有两种
    1. Little endian:将低序字节存储在起始地址
    2. Big endian:将高序字节存储在起始地址

    LE little-endian 
    最符合人的思维的字节序 
    地址低位存储值的低位 
    地址高位存储值的高位 
    怎么讲是最符合人的思维的字节序,是因为从人的第一观感来说 
    低位值小,就应该放在内存地址小的地方,也即内存地址低位 
    反之,高位值就应该放在内存地址大的地方,也即内存地址高位

    BE big-endian 
    最直观的字节序 
    地址低位存储值的高位 
    地址高位存储值的低位 
    为什么说直观,不要考虑对应关系 
    只需要把内存地址从左到右按照由低到高的顺序写出 
    把值按照通常的高位到低位的顺序写出 
    两者对照,一个字节一个字节的填充进去

    例子:在内存中双字0x01020304(DWORD)的存储方式

    内存地址 
    4000 4001 4002 4003 
    LE 04 03 02 01 
    BE 01 02 03 04

    例子:如果我们将0x1234abcd写入到以0x0000开始的内存中,则结果为
          big-endian  little-endian
    0x0000  0x12      0xcd
    0x0001  0x23      0xab
    0x0002  0xab      0x34
    0x0003  0xcd      0x12
    x86系列CPU都是little-endian的字节序.

    网络字节顺序是TCP/IP中规定好的一种数据表示格式,它与具体的CPU类型、操作系统等无关,从而可以保证数据在不同主机之间传输时能够被正确解释。网络字节顺序采用big endian排序方式。

    为了进行转换 bsd socket提供了转换的函数 有下面四个
    htons 把unsigned short类型从主机序转换到网络序
    htonl 把unsigned long类型从主机序转换到网络序
    ntohs 把unsigned short类型从网络序转换到主机序
    ntohl 把unsigned long类型从网络序转换到主机序

    在使用little endian的系统中 这些函数会把字节序进行转换 
    在使用big endian类型的系统中 这些函数会定义成空宏

    同样 在网络程序开发时 或是跨平台开发时 也应该注意保证只用一种字节序 不然两方的解释不一样就会产生bug.

    注:
    1、网络与主机字节转换函数:htons ntohs htonl ntohl (s 就是short l是long h是host n是network)
    2、不同的CPU上运行不同的操作系统,字节序也是不同的,参见下表。
    处理器    操作系统    字节排序
    Alpha    全部    Little endian
    HP-PA    NT    Little endian
    HP-PA    UNIX    Big endian
    Intelx86    全部    Little endian <-----x86系统是小端字节序系统
    Motorola680x()    全部    Big endian
    MIPS    NT    Little endian
    MIPS    UNIX    Big endian
    PowerPC    NT    Little endian
    PowerPC    非NT    Big endian  <-----PPC系统是大端字节序系统
    RS/6000    UNIX    Big endian
    SPARC    UNIX    Big endian
    IXP1200 ARM核心    全部    Little endian

    本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/zouxinfox/archive/2007/10/07/1814088.aspx

     

    Part 3: 模拟htonl、ntohl、htons、ntohs函数实现

    --------------------------------------------------------------------------------
    今天在如鹏网里讨论htonl、ntohl在不同机器的区别,特意模拟了htonl、ntohl、htons、ntohs函数实现。
    实现如下:

    typedef unsigned short int uint16;

    typedef unsigned long int uint32;

    // 短整型大小端互换

    #define BigLittleSwap16(A)  ((((uint16)(A) & 0xff00) >> 8) | /

                                                     (((uint16)(A) & 0x00ff) << 8))

     

    // 长整型大小端互换

    #define BigLittleSwap32(A)  ((((uint32)(A) & 0xff000000) >> 24) | /

                                                     (((uint32)(A) & 0x00ff0000) >> 8) | /

                                                     (((uint32)(A) & 0x0000ff00) << 8) | /

                                                     (((uint32)(A) & 0x000000ff) << 24))

     

    // 本机大端返回1,小端返回0

    int checkCPUendian()

    {

           union{

                  unsigned long int i;

                  unsigned char s[4];

           }c;

     

           c.i = 0x12345678;

           return (0x12 == c.s[0]);

    }

     

    // 模拟htonl函数,本机字节序转网络字节序

    unsigned long int HtoNl(unsigned long int h)

    {

           // 若本机为大端,与网络字节序同,直接返回

           // 若本机为小端,转换成大端再返回

           return checkCPUendian() ? h : BigLittleSwap32(h);

    }

     

    // 模拟ntohl函数,网络字节序转本机字节序

    unsigned long int NtoHl(unsigned long int n)

    {

           // 若本机为大端,与网络字节序同,直接返回

           // 若本机为小端,网络数据转换成小端再返回

           return checkCPUendian() ? n : BigLittleSwap32(n);

    }

     

    // 模拟htons函数,本机字节序转网络字节序

    unsigned short int HtoNs(unsigned short int h)

    {

           // 若本机为大端,与网络字节序同,直接返回

           // 若本机为小端,转换成大端再返回

           return checkCPUendian() ? h : BigLittleSwap16(h);

    }

     

    // 模拟ntohs函数,网络字节序转本机字节序

    unsigned short int NtoHs(unsigned short int n)

    {

           // 若本机为大端,与网络字节序同,直接返回

           // 若本机为小端,网络数据转换成小端再返回

           return checkCPUendian() ? n : BigLittleSwap16(n);

    }

    展开全文
  • 字节码指令详解

    万次阅读 2020-08-05 16:49:04
    字节码指令详解 指令简介 在计算机中,CPU指令就是指挥机器工作的指令,程序就是一系列按一定顺序排列的指令,执行程序的过程就是执行指令的过程,也就是计算机的工作过程。 通常一条CPU指令包括两方面的内容:操作...

    字节码指令详解

    指令简介

    在计算机中,CPU指令就是指挥机器工作的指令,程序就是一系列按一定顺序排列的指令,执行程序的过程就是执行指令的过程,也就是计算机的工作过程。

    通常一条CPU指令包括两方面的内容:操作码和操作数,操作码表示要完成的操作,操作数表示参与运算的数据及其所在的单元地址(这个单元地址可以是寄存器、内存等)。

    Java虚拟机中的字节码指令与CPU中指令类似,Java虚拟机的指令由一个字节长度的、代表着某种特定操作含义的操作码(opcode)以及跟随其后的零至多个代表此操作所需参数的操作数(operand)所构成。

    操作数的数量以及长度取决于操作码,如果一个操作数的长度超过了一个字节,那么它将大端排序存储,即高位在前的字节序。

    操作码只占一个字节,也就导致操作码个数不能超过256。

    class文件只会出现数字形式的操作码,但是为了便于人识别,操作码有他对应的助记符形式。

    对于基本数据类型,指令在设计的时候都用一个字母缩写来指代(boolean除外)。

    基本数据类型缩写
    byteb
    shorts
    inti
    longl
    floatf
    doubled
    charc
    refrencea
    boolean

    指令详解

    加载存储指令

    加载存储指令用来交换局部变量表和操作数栈中的数据,以及将常量加载到操作数栈。

    1. 将一个局部变量从局部变量表中加载到操作数栈栈顶:
    iload、iload_<n>、lload、lload_<n>、fload、fload_<n>、dload、dload_<n>、aload、aload_<n>
    

    其中n为局部变量表中的slot的序号,double和long占用两个slot。

    1. 将一个操作数栈的栈顶元素存储到局部变量表:
    istore、istore_<n>、lstore、lstore_<n>、fstore、fstore_<n>、dstore、dstore_<n>、astore、astore_<n>
    
    1. 将一个常量加载到操作数栈栈顶:
    bipush、sipush、ldc、ldc_w、ldc2_w、aconst_null、iconst_m1、iconst_<i>、lconst_<l>、fconst_<f>、dconst_<d>
    

    操作数为将要操作的数值或者常量池行号。

    1. 扩充局部变量表的访问索引的指令:wide。

    运算指令

    运算指令会取出操作数栈栈顶的两个元素进行某种特定的运算,然后将结果重新存入到操作数栈栈顶。

    运算指令分为两种:整型运算的指令和浮点型运算的指令。

    无论是哪种运算指令,都使用Java虚拟机的数据类型,由于没有直接支持byte、short、char和boolean类型的算术指令,使用操作int类型的指令代替。

    加法指令:iadd、ladd、fadd、dadd

    减法指令:isub、lsub、fsub、dsub

    乘法指令:imul、lmul、fmul、dmul

    除法指令:idiv、ldiv、fdiv、ddiv

    求余指令:irem、lrem、frem、drem

    取反指令:ineg、lneg、fneg、dneg

    位移指令:ishl、ishr、iushr、lshl、lshr、lushr

    按位或指令:ior、lor

    按位与指令:iand、land

    按位异或指令:ixor、lxor

    局部变量自增指令:iinc

    比较指令:dcmpg、dcmpl、fcmpg、fcmpl、lcmp

    类型转换指令

    类型转换指令可以将两种不同的数值类型进行相互转换。这些转换操作一般用于实现用户代码中的显式类型转换操作,或者用来解决字节码指令集不完备的问题。

    宽化指令:

    • int类型到long、float或者double类型
    • long类型到float、double类型
    • float类型到double类型

    处理窄化类型转换(Narrowing Numeric Conversions)时,必须显式地使用转换指令来完成,这些转换指令包括:i2b、i2c、i2s、l2i、f2i、f2l、d2i、d2l和d2f。

    对象的创建与存取指令

    new:创建对象。

    getfield:获取实例对象的属性的值。

    putfield:设置实例对象的属性的值。

    getstatic:获取类的静态属性的值。

    putstatic:设置类的静态属性的值。

    数组的创建与存取指令

    newarray:创建元素为基本数据类型的数组。

    anewarray:创建数据类型为引用类型的数组。

    multianewarray:创建多维数组。

    把一个数组元素加载到操作数栈栈顶的指令:baload、caload、saload、iaload、laload、faload、daload、aaload

    将一个操作数栈栈顶的值存储到数组元素中的指令:bastore、castore、sastore、iastore、fastore、dastore、aastore

    取数组长度的指令:arraylength

    检查类实例类型的指令

    instanceof、checkcast。

    操作数栈管理指令

    pop:将操作数栈的栈顶元素出栈。

    pop2:将操作数栈的栈顶两个元素出栈。

    复制栈顶一个或两个数值并将复制值或双份的复制值重新压入栈顶:dup、dup2、dup_x1、dup2_x1、dup_x2、dup2_x2

    将栈最顶端的两个数值互换:swap

    控制转移指令

    控制转移指令可以让Java虚拟机有条件或无条件地从指定的位置指令而不是控制转移指令的下一条指令继续执行程序。

    控制转移指令如下:

    • 条件分支:ifeq、iflt、ifle、ifne、ifgt、ifge、ifnull、ifnonnull、if_icmpeq、if_icmpne、if_icmplt、if_icmpgt、if_icmple、if_icmpge、if_acmpeq 和 if_acmpne。
    • 复合条件分支:tableswitch、lookupswitch。
    • 无条件分支:goto、goto_w、jsr、jsr_w、ret。

    方法调用指令

    invokevirtual:指令用于调用对象的实例方法,根据对象的实际类型进行分派(虚方法分派),这也是Java语言中最常见的方法分派方式。

    invokeinterface:指令用于调用接口方法,它会在运行时搜索一个实现了这个接口方法的对象,找出适合的方法进行调用。

    invokespecial:指令用于调用一些需要特殊处理的实例方法,包括实例初始化方法、私有方法和父类方法。

    invokestatic:指令用于调用类方法(static方法)。

    invokedynamic:指令用于在运行时动态解析出调用点限定符所引用的方法,并执行该方法,前面4条调用指令的分派逻辑都固化在Java虚拟机内部,而invokedynamic指令的分派逻辑是由用户所设定的引导方法决定的。

    方法调用指令与数据类型无关。

    方法返回指令

    方法返回指令是根据方法的返回值类型区分的,包括ireturn(当返回值是boolean、byte、char、short和int类型时使用)、lreturn、freturn、dreturn 和areturn,另外还有一条return指令供声明为void的方法、实例初始化方法以及类和接口的类初始化方法使用。

    异常处理指令

    在Java程序中显式抛出异常的操作(throw语句)都由athrow指令来实现。

    同步指令

    monitorenter和monitorexit两条指令来支持synchronized关键字的语义。

    常见语法结构对应的字节码指令

    异常处理

    public class SynchronizedDemo {
    
        final Object lock = new Object();
    
        void doLock() {
            synchronized (lock) {
                System.out.println("lock");
            }
        }
    }
    

    对应的字节码如下:

    stack=2, locals=3, args_size=1
       0: aload_0
       1: getfield      #3                  // Field lock:Ljava/lang/Object;
       4: dup
       5: astore_1
       6: monitorenter
       7: getstatic     #4                  // Field java/lang/System.out:Ljava/io/PrintStream;
      10: ldc           #5                  // String lock
      12: invokevirtual #6                  // Method java/io/PrintStream.println:(Ljava/lang/String;)V
      15: aload_1
      16: monitorexit
      17: goto          25
      20: astore_2
      21: aload_1
      22: monitorexit
      23: aload_2
      24: athrow
      25: return
    Exception table:
       from    to  target type
           7    17    20   any
          20    23    20   any
    

    在synchronized生成的字节码中,其中包含两条monitorexit指令,是为了保证所有的异常条件,都能够退出。

    可以看到,编译后的字节码,带有一个叫Exception table的异常表,里面的每一行数据,都是一个异常处理:

    • from:指定字节码索引的开始位置
    • to:指定字节码索引的结束位置
    • targe:t异常处理的起始位置
    • type:异常类型

    也就是说,只要在from和to之间发生了type异常,就会跳转到target所指定的位置。

    装箱和拆箱

    public class BoxDemo {
    
        public Integer cal() {
            Integer a = 1000;
            int b = a * 10;
            return b;
        }
    }
    

    对应的字节码如下:

     0: sipush        1000
     3: invokestatic  #2                  // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     6: astore_1
     7: aload_1
     8: invokevirtual #3                  // Method java/lang/Integer.intValue:()I
    11: bipush        10
    13: imul
    14: istore_2
    15: iload_2
    16: invokestatic  #2                  // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
    19: areturn
    

    通过观察字节码,我们发现装箱和拆箱的本质:

    • 装箱:调用Xxx.valueOf()方法将基本数据类型包装成包装对象。
    • 拆箱:调用Xxx.xxxValue()方法将包装对象转为基本数据类型。

    数组

    package com.morris.jvm.bytecode;
    
    public class ArrayDemo {
        int getValue() {
            int[] arr = new int[]{1111, 2222, 3333, 4444};
            return arr[2];
        }
        int getLength(int[] arr) {
            return arr.length;
        }
    }
    
    

    getValue()方法对应的字节码如下:

    stack=4, locals=2, args_size=1
       0: iconst_4
       1: newarray       int
       3: dup
       4: iconst_0
       5: sipush        1111
       8: iastore
       9: dup
      10: iconst_1
      11: sipush        2222
      14: iastore
      15: dup
      16: iconst_2
      17: sipush        3333
      20: iastore
      21: dup
      22: iconst_3
      23: sipush        4444
      26: iastore
      27: astore_1
      28: aload_1
      29: iconst_2
      30: iaload
      31: ireturn
    LineNumberTable:
      line 5: 0
      line 6: 28
    LocalVariableTable:
      Start  Length  Slot  Name   Signature
          0      32     0  this   Lcom/morris/jvm/bytecode/ArrayDemo;
         28       4     1   arr   [I
    

    可以看到,新建数组的代码,被编译成了newarray指令。

    数组的创建具体操作:

    1. iconst_0:常量0压入操作数栈栈顶。
    2. sipush:将一个常量1111压入操作数栈栈顶。
    3. iastore:将栈顶int型数值存入数组的0索引位置。

    数组元素的访问,是通过第28~30行字节码来实现的:

    1. aload_1:从局部变量表中第二个引用类型的局部变量压入操作数栈栈顶,这个引用就是生成的数组的引用。
    2. iconst_2:将int型2压入操作数栈栈顶。
    3. iaload:将int型数组指定索引的值压入操作数栈栈顶。

    getLength()方法对应的字节码如下:

    0: aload_1
    1: arraylength
    2: ireturn
    

    获取数组的长度,是由字节码指令arraylength来完成的。

    更多精彩内容关注本人公众号:架构师升级之路
    在这里插入图片描述

    展开全文
  • 字节跳动上班有多累?

    万次阅读 多人点赞 2020-06-07 12:09:06
    字节跳动上班有多累?前言面试邀约面试过程一面的出乎意料二面的游刃有余三面的压力测试立FLAG入职字节一年 人员三年临近崩溃第一次崩溃第二次崩溃第三次崩溃最新状态 前言      大部分的人都渴望能进入字节跳动...
  • 字节跳动面试题汇总

    千次阅读 2020-04-21 15:16:59
    字节跳动】字节跳动-抖音C++开发实习一二面凉经 https://www.nowcoder.com/discuss/342523 【字节跳动】字节跳动后端面经 已拿意向书 https://www.nowcoder.com/discuss/302265 【字节跳动】字节c++一面 ...
  • Java实现字节流与图片的转化
  • Java字节码增强探秘

    千次阅读 2019-09-10 14:03:58
    1.字节码 1.1 什么是字节码? Java之所以可以“一次编译,到处运行”,一是因为JVM针对各种操作系统、平台都进行了定制,二是因为无论在什么平台,都可以编译生成固定格式的字节码(.class文件)供JVM使用。因此,也...
  • 易语言对字节字节集的操作,包括取字节集长度();取字节集数据();到字节集()。 视频链接: 511遇见易语言教程 字节 字节(Byte):字节是通过网络传输信息(或在硬盘或内存中存储信息)的单位。 一个英文...
  • 实习生活之字节跳动

    万次阅读 多人点赞 2019-07-16 15:23:03
    博主上半年因为课程少(其实就是闲)的缘故,向各大中小 IT 公司,如字节跳动,360等的实习生岗位投递了简历,广撒网,多敛鱼,择优而从之。最终,博主看中字节跳动的高待遇——一天400,就近租房补贴,免费的一日三...
  • c语言中int型占内存四个字节还是两个字节?书上说int存储字节为2,为什么占内存为四个字节呢?
  • 大三实习生,字节跳动面经分享,已拿Offer

    万次阅读 多人点赞 2020-03-29 21:32:51
    其实准备字节跳动的面试还是需要着重准备基础部分(数据结构、算法、操作系统、计算机网络),另外对做算法题的要求很高,如果在看到题目的时候能直接给出这个题目的最优时空复杂度解法,面试官对你的评价会很高。...
  • 字节跳动的崛起史

    千次阅读 2019-11-01 17:23:00
    字节跳动的崛起史,就是百度的衰落史在字节跳动崛起之前,中国互联网行业是“BAT”的天下——百度、阿里巴巴、腾讯三大生态系统各自占据了一片领地。其中,腾讯的大本营是社交,阿里的大本营是电商,以上都毫无疑义...
  • 作者丨薛梁嘉宾丨梁宇明互联网科技公司的长久稳定发展,离不开坚实的技术支撑。在全球拥有 15 亿月活用户的字节跳动,背后的技术支撑,离不开牢固的基础架构和对技术理解深刻的技...
  • 字节和兆字节的换算Bytes and Megabytes are used in computing to specify the size as units. Bytes and Megabytes can be used in different areas of computing like memory, GPU, hard disk drive, programming...
  • Java字节数组byte b[]与byte[] b

    千次阅读 2020-12-25 15:16:06
    Java中的字节数组 Java字节数组仅用于存储字节数据类型值。字节数组中元素的默认值为0。 通过以下Java字节数组示例,您可以学习 如何声明Java字节数组? 如何为Java字节数组分配值? 如何从Java字节数组获取值...
  • 字节和兆字节的换算Megabyte is a multiple of the unit byte which is used in computing to describe digital data or information size or speed. Megabyte simply represented with the MB . Actually Megabyte ...
  • 字节集替换()将指定字节集的某一部分用其它的字节集替换,然后返回替换后的结果。子字节集替换()该字节集中指定的子字节集已被替换成另一子字节集,并且替换发生的次数也是被指定的。 视频链接: 511遇见...
  • 字节面试经历

    千次阅读 2020-04-22 15:33:18
    本人在20年2月加入字节跳动,入职一月有余,自己最大的感受是:很庆幸自己选择了字节。 为什么选择来字节字节之前,在上家公司待了7年。19年开始逐渐意识到,自己在一个舒适环境太久,已没有了年少时的...
  • python字节字节数组、编码

    千次阅读 2018-08-23 10:55:17
    计算机存储的几个概念  bit 二进制位, 是计算机内部数据储存的最小单位,11010100...字节,是计算机中数据处理的基本单位,计算机中以字节为单位存储和解释信息,规定一个字节由八个二进制位构成,即1个字节等于...
  • 高位字节与低位字节简单介绍

    千次阅读 2020-07-20 09:47:52
    一般一个16位(双字节)的数据,比如 FF1A (16进制) 那么高位字节就是FF,低位是1A 如果是32位的数据,比如 3F68415B 高位字(不是字节)是3F68 低位字是415B 右边是低位位,左边是高位 C语言中的高位字节和低位...
  • 【注】1汉字=2字节 1字节(Byte)=8字位=8个二进制数 1字位(bit)=1个二进制数 ②bits是bit的复数形式 ③概念:计算机存储信息的最小单位,称之为字位(bit,又称比特b),二进制的每一个0或1是组成二进制的最小...
  • c++中char,char*类型所占字节

    万次阅读 2018-09-01 11:55:37
    #include&lt;stdio.h&gt; int main() { char c = 'a'; char *p = &amp;c; char a = 'abcd'; char *d[2]; printf("%d\n",sizeof(c)); //1 printf("%d\n"...print...
  • java一个对象占用多少字节

    千次阅读 2019-06-26 12:32:41
    先来看object对象,通过上面的知识,它的Markword是8个字节,kclass是4个字节, 加起来是12个字节,加上4个字节的对齐填充,所以它占用的空间是16个字节。 再来看fruit对象,同样的,它的Markword是8个字节,kclass...
  • 1个字符=2个字节 1个字节=8个二进制位 Java中I/O操作是使用 java.io 包下的内容进行输入输出操作 输入也叫做读取数据 将硬盘中的数据读取到内存中使用 输出也叫做作写出数据 将内存中的数据写入到硬盘中...
  • UTF-8编码占几个字节?

    万次阅读 2019-01-29 16:18:00
    占2个字节的:带有附加符号的拉丁文、希腊文、西里尔字母、亚美尼亚语、希伯来文、阿拉伯文、叙利亚文及它拿字母则需要二个字节编码 占3个字节的:基本等同于GBK,含21000多个汉字 占4个字节的:中日韩超大字符集...
  • 什么是字节对齐,为什么需要字节对齐

    万次阅读 多人点赞 2019-09-07 14:58:43
     为了使CPU能够对变量进行快速的访问,变量的起始地址应该具有某些特性,即所谓的”对齐”,比如4字节的int型,其起始地址应该位于4字节的边界上,即起始地址能够被4整除,也即对齐跟数据在内存中的位置有关。...
  • 字符串与字节的相互转换

    千次阅读 2018-12-19 17:15:49
    在某A项目中,需要使用第三方系统socket接口,但第三系统无法提供...抓包工具抓取的都是16进制、2进制字节报文,由此引发字节与字符串互转方式的实验。 示例,源码: import java.util.ArrayList; import java.ut...
  • 字节跳动在 Go 网络库上的实践

    万次阅读 2020-05-11 10:01:44
    本文选自“字节跳动基础架构实践”系列文章。“字节跳动基础架构实践”系列文章是由字节跳动基础架构部门各技术团队及专家倾力打造的技术干货内容,和大家分享团队在基础架构发展和演进过程中的实践经...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,322,857
精华内容 929,142
关键字:

字节