摘要:
最近在给MP4文件做CENC加密时需要解析H264的slice头部,才发现对于H264的一些基本概念没有搞清楚。小小的记录一下: 1. 如何判断一个H264的帧类型。帧类型包括IDR/I/P/B. 看一下标准的描述: nal_unit( NumBytesInNALunit ){ forbidden_ 阅读全文
摘要:
POCO C++库学习和分析 -- UUID 1. 概述 通用唯一识别码(英语:Universally Unique Identifier,简称UUID)是一种软件建构的标准。UUID的目的,是让分散式系统中的所有元素,都能有唯一的辨识信息,而不需要通过中央控制端... 阅读全文
摘要:
POCO C++库学习和分析 -- URI (Uniform Resource Identifiers) 1. 概述 URI(RFC 3986)意为统一资源标记,通常被用来标志web上的资源。 在Poco库中提供了POCO::URI、POCO::U... 阅读全文
摘要:
POCO C++库学习和分析 -- 流 (三) 5 . ZLib Stream流 Poco::DeflatingInputStream、Poco::DeflatingOutputStream、Poco::InflatingInputStream和Poco::Inflat... 阅读全文
摘要:
POCO C++库学习和分析 -- 流 (二) 2. 创建自己的流 2.1 自定义流的结构 在Poco中提供了一个框架用于创建自己的流,并且创建的流都符合C++标准。想一下标准库中流的层次和结构。每一个流都必须有对应的流缓冲,并且在流初始化时提供此流缓冲的指针。Poco... 阅读全文
摘要:
POCO C++库学习和分析 -- 流 (一) 流(Stream)是C++和C之间的一大区别。写C++的程序员都知道流的用法。在Poco库中,在标准流的基础上又扩充了一些流,分别是基于Base64和HexBinary的编解码流,使用zlib的数据压缩流,二进制的I/O流,... 阅读全文
摘要:
POCO C++库学习和分析 -- 日志 (二) 2. Poco日志的实现 2.1 日志模块应该实现的业务 在讨论日志的实现之前,先来聊一下日志模块应该实现那些业务。日志的业务说简单可以很简单,就是输出记录。说复杂也复杂,来看它的复杂性: 首先,日志的输出... 阅读全文
摘要:
POCO C++库学习和分析 -- 日志 (一) 日志对于程序来说是非常重要的,特别是对一些大型程序而言。一旦程序被发布,在现场日志几乎是程序员唯一可以获取程序信息的手段。Poco作为一个框架类库,提供了非常多的日志种类供程序员选用。文章将分两个部分,对于Poco日志进行介... 阅读全文
摘要:
POCO C++库学习和分析 -- 文件系统 既然作为一个框架性的库,自然会提供对于文件系统的操作。在Poco库中,封装了一些类去完成上述操作。这些类包括了: 1. Poco::Path 2. Poco:... 阅读全文
摘要:
POCO C++库学习和分析 -- 随机数和数字摘要 在程序设计时,有时候我们需要生成随机数和数字摘要。在Poco库中,也提供了上述功能,下面我们一一叙述: 1. 随机数生成 Poco中生成随机数的类为Poco::Random类。它根据PRN... 阅读全文
摘要:
POCO C++库学习和分析 -- 异常、错误处理、调试 1. 异常处理 C++同C语言相比,提供了异常机制。通过使用try,catch关键字可以捕获异常,这种机制使得程序员在程序异常发生时,可以通过判断异常类型,来决定程序是否继续执行,并在程序结束之前优雅的释放各类资源。... 阅读全文
摘要:
POCO C++库学习和分析 -- 日期与时间 在Poco库中,与时间和日期相关的一些类,其内部实现是非常简单的。看相关文档时,比较有意思的倒是历史上的不同时间表示法。 1. 系统时间函数 在编程时,时间函数不可避免的会被使用。linux系统下相关时间的数... 阅读全文
摘要:
POCO C++库学习和分析 -- 平台与环境 在写程序的时候,有时候需要收集一些系统信息,用作软硬件的绑定或生成唯一的注册码信息等。Poco中提供了一个很简单的类Environment来实现这个功能。这个类的定义如下: class Foundation_API Envi... 阅读全文
摘要:
POCO C++库学习和分析 -- 字符编码 1. 字符编码 1.1 字符编码的概念 字符编码可以理解为在计算机上语言符号和二比特数之间的映射。不同的编码方式对应着不同映射方法,对于映射集的双方而言,用一种映射方法下,映射关系是一一对应的。由于语言的基本符号是有限的,所以作... 阅读全文
摘要:
POCO C++库学习和分析 -- Cache 1. Cache概述 在STL::map或者STL::set中,容器的尺寸是没有上限的,数目可以不断的扩充。并且在STL的容器中,元素是不会自动过期的,除非显式的被删除。Poco的Cache可以被看成是STL中容器的一个扩充,容... 阅读全文
摘要:
POCO C++库学习和分析 -- 哈希 1. Hash概论 在理解Poco中的Hash代码之前,首先需要了解一下Hash的基本理论。下面的这些内容和教课书上的内容并没有太大的差别。 1.1 定义 下面这几段来自于百度百科: Hash:一般... 阅读全文
摘要:
POCO C++库学习和分析 -- 数据类型转换 文章写到这里,Foundation库中的功能已经介绍过半了。在接下去介绍其他模块之前,我们先来回顾一下前面的内容。前面的内容包括了: 1. SharedLibrary模块(插件技术) 《Founda... 阅读全文
摘要:
POCO C++库学习和分析 -- 通知和事件 (四) 5. 事件 Poco中的事件和代理概念来自于C#。对于事件的使用者,也就是调用方来说,用法非常的简单。 5.1 从例子说起 首先让我们来看一个同步事件例子,然后再继续我们的讨论: #include "Po... 阅读全文
摘要:
POCO C++库学习和分析 -- 通知和事件 (三) 4. 异步通知 4.1 NotificationQueue类 Poco中的异步通知是通过NotificationQueue类来实现的,同它功能类似还有类PriorityNotificationQueue和TimedNot... 阅读全文
摘要:
POCO C++库学习和分析 -- 通知和事件 ( 二 ) 2. 通知和事件的总览 2.1 相关类信息 下面是Poco库和通知、事件相关的类 1) 同步通知实现:类Notification和NotificationCenter 2) 异步通知实... 阅读全文
摘要:
POCO C++库学习和分析 -- 通知和事件 (一) 1. 信息交流的方法 在讨论Poco中事件与通知之前,先来聊一聊信息交流的方法,这样或许有助于理解接下去的讨论。我们都知道数据之间存在关系。在数据库模型里,关系被分为一对一,一对多,多对多。在用计算机去解决数据关系的... 阅读全文
摘要:
POCO C++库学习和分析 -- 进程 Poco::Foundation库中涉及进程的内容主要包括了4个主题,分别是进程(Process)、进程间同步(inter-process synchronization)、管道(Pipes)、共享内存(Shared Memory)。我... 阅读全文
摘要:
POCO C++库学习和分析 -- 内存管理 (三) 看完Poco库中的智能指针,基本上Poco中的内存管理已经快结束了。其他的部分都是些边边角角的东西,非常的简单。下面一一介绍。 4. AutoReleasePool AutoReleasePool类的出... 阅读全文
摘要:
POCO C++库学习和分析 -- 内存管理 (二) 3. SharedPtr SharedPtr是Poco库中基于引用计数实现的另外一种智能指针。同AutoPtr相比,Poco::SharedPtr主要用于为没有实现引用计数功能的类(换句话说,也就是该类本身不是引用计数对象... 阅读全文
摘要:
POCO C++库学习和分析 -- 内存管理 (一) 对于内存的管理,Poco C++库中主要包含了引用计数,智能指针,内存池等几个部分。下面将分别对这几个部分进行介绍。首先回顾一下,对于内存的管理,出现过的几种技术。C时代的内存池,主要解决内存碎片,和内存的频繁获取和释放的开销... 阅读全文
摘要:
POCO C++库学习和分析 -- 任务 1. 任务的定义 任务虽然在Poco::Foundation库的目录结构中被单独划出,其实也可以被看成线程的应用,放在线程章节。首先来看一下Poco中对于任务的描述: task主要应用在GUI和Seerver程序中,用于追踪后台线... 阅读全文
摘要:
POCO C++库学习和分析 -- 线程 (四) 5. 主动对象 5.1 线程回顾 在讨论主动对象之前,我想先说一下对于Poco中多线程编程的理解。大家都知道,对于多线程编程而言最基本的元素只有两个数据:锁和线程。线程提高了程序的效率,也带来了数据的竞争,因此为了保证数据的正确性... 阅读全文
摘要:
POCO C++库学习和分析 -- 线程 (三) 4. 定时器 定时器作为线程的扩展,也是编程时经常会被用到的元素。在程序设计上,定时器的作用是很简单。预定某个定时器,即希望在未来的某个时刻,程序能够得到时间到达的触发信号。 编程时,一般对定时器使用有下面一些关注点: 1. 定时器的精度。Poc... 阅读全文
摘要:
POCO C++库学习和分析 -- 线程 (二) 3. 线程池 3.1线程池的基本概念 首先我们来明确线程池的一些概念。 什么是线程池?线程池的好处? 池的英文名:POOL,可以被理解成一个容器。线程池就是放置线程对象的容器。我们知道线程的... 阅读全文
摘要:
POCO C++库学习和分析 -- 线程 (一) 线程是程序设计中用的非常多的技术,在UI设计,网络通讯设计中广泛使用。在POCO库中,线程模块可以分成6个部分去理解。锁(Lock),线程(Thread),主动对象(ActiveObject),线程池(ThreadPool... 阅读全文
摘要:
POCO C++库学习和分析 -- Foundation库SharedLibrary模块分析 对于一个不熟悉的开源库和模块,我觉的最好的学习方法莫过于: 1. 使用库,看库实现了什么功能和接口; 2. 抛开库,想一想,自己如何实现。可以想... 阅读全文
摘要:
POCO C++库学习和分析 -- Foundation库结构 Foundation库是POCO库集中的一个,提供了编程时的一些常用抽象。在程序中被分成了18个部分,分别是: 1)Core 这部分除了建立跨平台库的基础头文件外,最有意义的部分是分装了原子计数的基本类(AtomicCount... 阅读全文
摘要:
POCO C++库学习和分析 -- 跨平台库的生成 这一节主要讲一下,如何在window上生成一个类似于POCO动态库,以及POCO跨平台头文件的结构。 POCO C++ Basic Edition版本,工程由四部分联合而成,分别是Foundation,Net,U... 阅读全文
摘要:
POCO C++库学习和分析 -- 序 1. POCO库概述: POCO是一个C++的开源库集。同一般的C++库相比,POCO的特点是提供了整一个应用框架。如果要做C++程序应用框架的快速开发,我觉得STL+boost+Poco+Qt+Mysql实在是个不错的组合。 下面的这张图提供了POC... 阅读全文