字节数组

Socket读写数据流程

女生的网名这么多〃 提交于 2020-01-18 05:15:48
当客户端和服务器使用TCP协议进行通信时,客户端封装一个请求对象req,将请求对象req序列化成字节数组,然后通过套接字socket将字节数组发送到服务器,服务器通过套接字socket读取到字节数组,再反序列化成请求对象req,进行处理,处理完毕后,生成一个响应对应res,将响应对象res序列化成字节数组,然后通过套接字将字节数组发送给客户端,客户端通过套接字socket读取到字节数组,再反序列化成响应对象。 通信框架往往可以将序列化的过程隐藏起来,我们所看到的现象就是上图所示,请求对象req和响应对象res在客户端和服务器之间跑来跑去。 也许你觉得这个过程还是挺简单的,很好理解,但是实际上背后发生的一系列事件超出了你们中大多数人的想象。通信的真实过程要比上面的这张图复杂太多。你也许会问,我们需要了解的那么深入么,直接拿来用不就可以了么? 在互联网技术服务行业工作多年的经验告诉我,如果你对底层机制不了解,你就会不明白为什么对套接字socket的读写会出现各种奇奇乖乖的问题,为什么有时会阻塞,有时又不阻塞,有时候还报错,为什么会有粘包半包问题,NIO具体又是什么,它是什么特别新鲜的技术么?对于这些问题的理解都需要你了解底层机制。 5、Socket读写的细节过程分析 为了方便大家对通信底层的理解,我花了些时间做了下面这个动画,它并不能完全覆盖底层细节的全貌

IO流

北城以北 提交于 2020-01-17 13:32:45
一、概念介绍 1、什么是IO流? I: InputStream,输入,读取,从硬盘到内存,读进来 O: Output,输出,写入,从内存到硬盘,写出去 2、IO流的分类 (1)按照流的方向: 输入流:字节输入流/字符输入流 输出流:字节输出流/字符输出流 (2)按照流中的内容 字节流:计算机中的一切都是字节,可以一次操作一个/多个字节,可以操作任意类型的文件。 字符流:只能操作纯文本文件,用记事本打开,可以看得懂的文件。 (PS:.java、.txt、.html、.css 是纯文本文件;.doc、.xls不是纯文本文件) 3、文件的续写与换行 (1)文件的续写 构造方法: FileOutputStream(File path, boolean append) FileOutputStream(String path, boolean append) 其中, 参数一:String/File类型的文件路径; 参数二:boolean append(true就是追加写入,继续写;false就是重新写,覆盖写。不写默认为false)。 (2)换行 \r\n 适用于Windows系统,每行结尾是“回车+换行”; \n 适用于Unix系统里,每行结尾只有“换行”; \r 适用于Mac系统,每行结尾是“回车”,即 “\r” 。从 Mac OS X 开始与Linux统一。 二、IO流 1、字节流 1

C# .Net中的类型转换

倖福魔咒の 提交于 2020-01-16 21:55:15
1. 装箱、拆箱还是别名 许多 C#.NET 的书上都有介绍 int -> Int32 是一个装箱的过程,反之则是拆箱的过程。许多其它变量类型也是如此,如:short <-> Int16,long <-> Int64 等。对于一般的程序员来说,大可不必去了解这一过程,因为这些装箱和拆箱的动作都是可以自动完成的,不需要写代码进行干预。但是我们需要记住这些类型之间的关系,所以,我们使用“别名”来记忆它们之间的关系。 C# 是全面向对象的语言,比 Java 的面向对象都还彻底——它把简单数据类型通过默认的装箱动作封装成了类。Int32、Int16、Int64 等就是相应的类名,而那些我们熟悉的、简单易记的名称,如 int、short、long 等,我们就可以把它称作是 Int32、Int16、Int64 等类型的别名。那么除了这三种类型之外,还有哪些类有“别名”呢?常用的有如下一些: bool -> System.Boolean (布尔型,其值为 true 或者 false) char -> System.Char (字符型,占有两个字节,表示 1 个 Unicode 字符) byte -> System.Byte (字节型,占 1 字节,表示 8 位正整数,范围 0 ~ 255) sbyte -> System.SByte (带符号字节型,占 1 字节,表示 8 位整数,范围 -128

C#中的类型转换

心已入冬 提交于 2020-01-16 21:49:53
最近由于编程的需要,对 C# 的类型转换做了一些研究,其内容涉及 C# 的装箱/拆箱/别名、数值类型间相互转换、字符的 ASCII 码和 Unicode 码、数值字符串和数值之间的转换、字符串和字符数组/字节数组之间的转换、各种数值类型和字节数组之间的转换、十六进制数输出以及日期型数据的一些转换处理,在这里与大家分享——    1. 装箱、拆箱还是别名   许多 C#.NET 的书上都有介绍 int -> Int32 是一个装箱的过程,反之则是拆箱的过程。许多其它变量类型也是如此,如:short <-> Int16,long <-> Int64 等。对于一般的程序员来说,大可不必去了解这一过程,因为这些装箱和拆箱的动作都是可以自动完成的,不需要写代码进行干预。但是我们需要记住这些类型之间的关系,所以,我们使用“别名”来记忆它们之间的关系。 C# 是全面向对象的语言,比 Java 的面向对象都还彻底——它把简单数据类型通过默认的装箱动作封装成了类。Int32、Int16、Int64 等就是相应的类名,而那些我们熟悉的、简单易记的名称,如 int、short、long 等,我们就可以把它称作是 Int32、Int16、Int64 等类型的别名。   那么除了这三种类型之外,还有哪些类有“别名”呢?常用的有如下一些: bool -> System.Boolean (布尔型,其值为

C# 中的类型转换

℡╲_俬逩灬. 提交于 2020-01-16 21:21:19
C# 出来也有些日子了,最近由于编程的需要,对 C# 的类型转换做了一些研究,在学习中整理了一份在这里与大家分享,很适用哦! 其内容涉及 C# 的装箱/拆箱/别名、数值类型间相互转换、字符的 ASCII 码和 Unicode 码、数值字符串和数值之 间的转换、字符串和字符数组/字节数组之间的转换、各种数值类型和字节数组之间的转换、十六进制数输出以及日期型数据的一些转换处理。 1. 装箱、拆箱还是别名 许多 C# 的书上都有介绍 int -> Int32 是一个装箱的过程,反之则是拆箱的过程。许多其它变量类型也是如此,如:short <-> Int16,long <-> Int64 等。对于一般的程序员来说,大可不必去了解这一过程,因为这些装箱和拆箱的动作都是可以自动完成的,不需要写代码进行干预。但是我们需要记住这些类型之间的关系,所以,我们使用“别名”来记忆它们之间的关系。 C# 是全面向对象的语言,比 Java 的面向对象都还彻底——它把简单数据类型通过默认的装箱动作封装成了类。Int32、Int16、Int64 等就是相应的类名,而那些我们熟悉的、简单易记的名称,如 int、short、long 等,我们就可以把它称作是 Int32、Int16、Int64 等类型的别名。 那么除了这三种类型之外,还有哪些类有“别名”呢?常用的有如下一些: bool -> System

将字节数组转成易读的字符串

这一生的挚爱 提交于 2020-01-15 19:01:24
来自森大科技官方博客 http://www.cnsendblog.com/index.php/?p=301 GPS平台、网站建设、软件开发、系统运维,找森大网络科技! http://cnsendnet.taobao.com 1、这个方法在GpsNET.JT809Core里 来自森大科技官方博客 http://www.cnsendblog.com/index.php/?p=301 GPS平台、网站建设、软件开发、系统运维,找森大网络科技! http://cnsendnet.taobao.com 来源: 51CTO 作者: 森大科技 链接: https://blog.51cto.com/14036626/2467089

基础-内存

不问归期 提交于 2020-01-13 00:53:34
什么是内存 内存(Memory)是计算机中最重要的部件之一,它是程序与CPU进行沟通的桥梁。计算机中所有程序的运行都是在内存中进行的,因此内存对计算机的影响非常大,内存又被称为 主存 ,其作用是存放 CPU 中的运算数据,以及与硬盘等外部存储设备交换的数据。只要计算机在运行中,CPU 就会把需要运算的数据调到主存中进行运算,当运算完成后CPU再将结果传送出来,主存的运行也决定了计算机的稳定运行。 内存的物理结构 在了解一个事物之前,你首先得先需要 见 过它,你才会有印象,才会有想要了解的兴趣,所以我们首先需要先看一下什么是内存以及它的物理结构是怎样的。 内存的内部是由各种IC电路组成的,它的种类很庞大,但是其主要分为三种存储器 随机存储器(RAM):内存中最重要的一种,表示既可以从中读取数据,也可以写入数据。当机器关闭时,内存中的信息会 丢失 。 只读存储器(ROM):ROM 一般只能用于数据的读取,不能写入数据,但是当机器停电时,这些数据不会丢失。 高速缓存(Cache):Cache 也是我们经常见到的,它分为一级缓存(L1 Cache)、二级缓存(L2 Cache)、三级缓存(L3 Cache)这些数据,它位于内存和 CPU 之间,是一个读写速度比内存 更快 的存储器。当 CPU 向内存写入数据时,这些数据也会被写入高速缓存中。当 CPU 需要读取数据时

VBA基础语法:数组

雨燕双飞 提交于 2020-01-10 20:59:18
声明数组 数组 的声明方式和其它的 变量 是一样的,它可以使用 Dim 、 Static 、 Private 或 Public 语句来声明。标量变量(非数组)与数组变量的不同在于通常必须指定数组的大小。若数组的大小被指定的话,则它是个固定大小数组。若程序运行时数组的大小可以被改变,则它是个动态数组。 数组是否从 0 或 1 索引是根据 Option Base 语句的设置。如果 Option Base 没有指定为 1, 则数组索引从零开始。 声明固定大小的数组 下面这行代码声明了一个固定大小的数组,它是个 11 行乘以 11 列的 Integer 数组: Dim MyArray(10, 10) As Integer 第一个参数代表的是行;而第二个参数代表的是列。 与其它变量的声明一样,除非指定一个 数据类型 给数组,否则声明数组中元素的数据类型为 Variant 。数组中每个数组的数字型 Variant 元素占用 16 个字节。每个字符串型 Variant 元素占用 22 个字节。为了尽可能使写的代码简洁明了,则要明确声明的数组为某一种数据类型而非 Variant 。下面的这几行代码比较了几个不同数组的大小: ' 整型数组使用 22 个字节(11 元素* 2 字节) ReDim MyIntegerArray(10) As Integer ' 双精度数组使用 88 个字节(11 元素

Java实现文件写入——IO流(输入输出流详解)

耗尽温柔 提交于 2020-01-08 17:58:03
输入输出的重要性: 输入和输出功能是Java对程序处理数据能力的提高,Java以流的形式处理数据。流是一组有序的数据序列,根据操作的类型,分为输入流和输出流。 程序从输入流读取数据,向输出流写入数据。Java是面向对象的程序语言,每一个数据流都是一个对象,它们提供了各种支持“读入”与“写入”操作的流类。 Java的输入输出功能来自java.io 包中的InputStream类、OutputStream类、Reader类和Writer类以及继承它们的各种子类。 (一)解析文件处理的奥秘 1、学习使用文件类 : File类 File类用于封装系统的文件和目录的相关信息。在该类中定义了一些与平台无关的方法来操作文件。例如文件的大小、修改时间、文件路径等。 创建 File 对象可以通过下面3种方式: 方法1: 方法2: 方法3: new File(String pathName) File file = new File(“E://1.txt”) new File(String parent , String child) parent :父抽象路径名;child:子路径名字符串 2、如何获取文件信息 File 类是对文件和文件夹的抽象,包含了对文件和文件夹的多种属性和操作方法。File类的常用方法如下表: 返回 方法 说明 String getName 获取文件名称 String

MessagePack详解

痴心易碎 提交于 2020-01-02 00:21:08
版权声明:分享是一种品质,开源是一种精神。 https://blog.csdn.net/wangmx1993328/article/details/84477073 MessagePack Intro It's like JSON.but fast and small. MessagePack is an efficient binary serialization format. It lets you exchange data among multiple languages like JSON. But it's faster and smaller. Small integers are encoded into a single byte, and typical short strings require only one extra byte in addition to the strings themselves. 它像 JSON,但是更快更小。 MessagePack 是一种高效的二进制序列化格式。它允许您在 JSON 等多种语言之间交换数据,但它更快速更小巧。小整数被编码为单个字节,典型的短字符串除了字符串本身之外只需要一个额外的字节。 MessagePack 官网地址: https://msgpack.org/ MessagePack Java 模块