Byte和byte[]数组,“表示一个 8 位无符号整数, 一般为8位二进制数”。

Byte是计算机最基础的存储单位和最基础的通讯单位。

而所有的类型都是支持由byte[]类型转换而来。

为什么说Byte是最基础类型那,

其实这里的关键所在是,计算机最基础的算法是编码,包括媒体文件、图片、各种文档以致计算机算有数据的文件展现都是字符串,而这些字符串都是由编码得来。

不管你是各种千奇百怪的字符串组成的格式,最终都要根据编码表,字符转换成相对应的十进制数字,而这相应的十进制数字那,就会存储在byte[]数组中(这里的十进制数是用来计算的,存储时会自动转换为二进制数字存储,程序计算时会按十进制计算)。

媒体文件、图片、各种文档等等—》源文件由字符串组成,多个字符—》单个字符—》十进制数字(根据相应编码)—》byte[]数组(单个字符) —》byte[]数组(多个字符) —》媒体文件、图片、各种文档等等存储单位或通讯单位。

此时这个“单个字符”二进制的长度就是根据相应编码得来的,由多个字符组成的byte[]就组成了媒体文件、图片、各种文档等等的源文件。

具体如下:

UTF-8编码:一个英文字符等于一个字节,一个中文(含繁体)等于三个字节。

Unicode编码:一个英文等于两个字节,一个中文(含繁体)等于两个字节。

下面可以看到UTF-8编码的byte[]数组(C# byte[]默认存储计算为十进制),所以说最终计算机数据是由byte类型组成数据为基础的。

网络传输:

如果是自己程序间的对接,byte[]类型理论上就够了(实际上也不够,哈哈),在传输段传输byte[]类型,收取端收取byte[]类型,然后转化为原格式就可以了。

“a张”编码—>byte[0]=97、byte[1]=229、byte[2]=188、byte[3]=160(byte[0]=01100001、byte[1]=11100101、byte[2]=10111100、byte[3]=10100000)—>传输—>收取为byte[]—> 解码“a张”。

但是如果传输的数据是开放式的,或者生成可读的文件,比如文件格式的,url,xml、json的话,是不能存储byte[]型的,看不懂也没法解析,这就要求再吧byte[]再编码为字符串类型。

到了网络传输过程了,前文我们已经得到了文件最基础的存储格式,byte[]数组,但作为程序传输他面临个问题,因为程序传输一般可见的是以字符形式传输的(中间过程是网络层自动转换的),那么就需要把byte[]类型转换为字符串传输,很多人是感觉怎么有转换为字符串了,这不是和原来一样了吗,其实不是,现在编码的就不是任意字符串了,是基础的二进制数字10做成的字符串,相当于把byte[]类型每个byte转换为字符串传送,而在接收端在转换为byte[]数组,这相当于无编码过程。

byte[]是数据类型的,长度是有限制的,也不灵活。所以说基础传输其实是1和0组成的长字符串。

简单的说就是数据编码成byte[],byte[]再二次编码成为易于传送的字符串。

如下

“a张”编码—>byte[0]=97、byte[1]=229、byte[2]=188、byte[3]=160(byte[0]=01100001、byte[1]=11100101、byte[2]=10111100、byte[3]=10100000)—>不编码“01100001111001011011110010100000” —>传输—>解析成为byte[]—>解码“a张”

“a张”编码—>byte[0]=97、byte[1]=229、byte[2]=188、byte[3]=160(byte[0]=01100001、byte[1]=11100101、byte[2]=10111100、byte[3]=10100000)—>  base64 编码串—>传输—>解析成为byte[]—>解码“a张”

更多的是,在转换字符串传输的过程,还要对这个byte[]进行编码。

注1:在传输过程中,基础的byte[]类型还可以做各种编码传输,如base64字符串、16进制编码、xml、json、html等等,不过万变不离其中的是编码和解码。

注2:“传输”时,还是以基础二进制数据传输,不过这和应用层无关,是传输层自动完成了,应用层的数据只需要处理自己的传输格式就可以了。

Byte和byte[]数组的更多相关文章

  1. java byte【】数组与文件读写(增加新功能)

    今天在测试直接写的文章: java byte[]数组与文件读写 时,想调用FileHelper类对字节数组以追加的方式写文件,结果无论怎样竟然数据录入不全,重新看了下文件的追加模式,提供了两种方式: ...

  2. Byte和byte的区别

    Byte和byte的区别 背景 今天学习网络编程中,在建立Udp连接时,使用byte[]数组接收传输的数据,但是byte[]错写为Byte[],导致错误.    //接收数据:         Byt ...

  3. short a = 128, byte b = (byte)a 强制类型转换

    package 笔试; public class ShortToByte { /** * @param args */ public static void main(String[] args) { ...

  4. java byte【】数组与文件读写

    此文全文参考http://blog.csdn.net/sniffer_wang/article/details/7455701,自己加以改进应用,谢了 import java.io.ByteArray ...

  5. Java 中 byte、byte 数组和 int、long 之间的转换

    Java 中 byte 和 int 之间的转换源码: //byte 与 int 的相互转换 public static byte intToByte(int x) { return (byte) x; ...

  6. C# 对象转换为byte[] ,byte[]还原对象

    /// <summary>  /// 将一个object对象序列化,返回一个byte[]          /// </summary>  /// <param name ...

  7. java对象序列化byte[] and byte[]反序列化对象--转

    import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOExceptio ...

  8. new String(byte[])和byte[]toString() 的区别

    byte[]字节数组的toString()获得的字符串和使用new String(byte[])构造一个新的字符串,这两个字符串是不一样的.Java对象都继承于Object,Object中提供了toS ...

  9. (转)教你完全理解IO流里的 read(),read(byte[]),read(byte[],int off,int len)以及write

    背景:对于IO部分,总是感觉很虚,不能很好的理解其中的要义,其实仔细分析,掌握其中的规律,一切都会看起来十分的自然. 1 理解 1.1 从头总结 长期以来,java中的InputStream Outp ...

随机推荐

  1. 把已安装的wampserver移动到不同目录使用应注意的问题

    很多时候需要把已安装的wampserver移动到不同目录使用,此时应注意几个问题: 1.修改D:\wamp64\bin\apache\apache2.4.9\conf目录下的httpd.conf文件( ...

  2. 织梦dedecms 自带采集的缩略图地址后面有“/”斜杠的解决方法

    本来想偷懒在网上找一些文档去解决织梦采集缩略图地址带“/”的问题的,可是找了找发现没有人写出解决方法,只好自己动手了. 过程很复杂,找了问题的原因也是找了半天,自己一点一点的测试.最后找到了问题所在. ...

  3. java基础10(IO流)-字节流

    IO流 输入与输出[参照物是程序] 如果从键盘.文件.网络甚至是另一个进程(程序或系统)将数据读入到程序或系统中,称为输入 如果是将程序或系统中的数据写到屏幕.硬件上的文件.网络上的另一端或者是一个进 ...

  4. html里id和name的异同

    id与name的作用,作为标签的标识符,基本上是一样的. name是老方法,id是在name基础上发明的,比name“现代化”一点,用的范围广一点 <...>中的name原来(刚发明时)就 ...

  5. hdu 2490 队列优化dp

    http://acm.hdu.edu.cn/showproblem.php?pid=2490 Parade Time Limit: 4000/2000 MS (Java/Others)    Memo ...

  6. uva11292 Dragon of Loowater(排序后贪心)

    #include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #inc ...

  7. php是如何工作的

    a:前提条件: apache服务器启动正常工作 b:客户端浏览器在地址栏输入一个程序地栏 按回车发送请求 {请求}http://127.0.0.1/day03/1.php c:apache接收请求,并 ...

  8. c语言%.*s是什么

    int i; ;i<;i++) printf("%.*s%s\n", i, " ", "########"); ; *用来指定宽度,对 ...

  9. C语言中time函数获取系统时间

    可以通过time()函数来获得计算机系统当前的日历时间(Calendar Time),处理日期时间的函数都是以本函数的返回值为基础进行运算.其原型为: time_t time(time_t * t); ...

  10. 以前的实验博客地址,以前使用csdn

    实验一木马分析(隐藏分析)实验 http://blog.csdn.net/qq_30600405/article/details/78360599 实验二木马分析(控制分析)实验和实验三冰河木马实验 ...