oto

阅读 / 问答 / 标签

谁有overlap PCR 的具体操作protocol

其实就是PCR,做两次,把两段序列融合在一起,第一次PCR的时候,第一段序列的3"引物和第二段序列的5"引物要有一段互补区,然后用第一次PCR的产物做模板,第一段序列的5"引物和第二段序列的3"引物做引物,进行第二次扩增,形成融合序列,详见图示。

请问服装外贸中 proto sample 是什么样衣?

初板. 第一次打出来的样品. 也叫"头办"

protobuf报错command not found: protoc和Brew Link失败

因为安装其他东西动了环境导致protobuf的命令无法执行。报错 command not found: protoc 。没找到原因,想着就直接卸载重装了protobuf。 $ brew uninstall protobuf //然后重新安装 $ brew install protobuf 安装之后link失败了,报错如下 网上找了一圈,执行下就可以重新link了。 然后protobuf指令也正常了。 指令来源

SpringBoot使用protobuf生成的model进行传参无法序列化

配置后不生效,报错信息如下: 最开始怀疑是ProtobufHttpMessageConverter没有注册到HttpMessageConverter的列表中,于是开始跟踪源码发现HttpMessageConverter列表中已经添加上了: 既然已经添加进去了,那为什么不走转换器的逻辑,继续往下走发现: converter.canWrite(valueType, selectedMediaType)这个方法返回false导致body没有进行适配,下面进行判空逻辑后就会抛出异常: 继续跟下去,canWrite是调用了父类org.springframework.http.converter.AbstractHttpMessageConverter#canWrite: 而ProtobufHttpMessageConverter其实已经重写了supports与canWrite方法: 这里发现根源其实是Message.class.isAssignableFrom(clazz)返回的false。那么难道protobuf生成的model不是com.google.protobuf.Message的子类吗? 查看生成的java文件发现model确实不是继承的GeneratedMessageV3,而是继承了GeneratedMessageLite。至此发现了导致问题的根源。

go的protobuf这个问题是不是一个bug

客户端lua,通信协议是protobuf,以前用网易的proto-gen-lua,使用过程遇到些问题需要绕,比如: 1、每次更改、增加proto都要生成新的文件,代码规模剧增 2、由于lua本身,每个文件最大文件内全局local变量不能超过200个,所以当proto规模太大时。

ip-proto 253是什么

这个是思科的配置,本人不太熟悉...解释仅供参考... ip forward-protocol udp bootpsservice dhcp这个是开启DHCP服务... spanning-tree rmon enable这个是开启生成树协议... !forward protocol udp 67(active)!ip helper-address 125.219.152.18指定DHCP服务器的地址... 最后一条配置静态默认路由,即网关...

怎么把.proto格式文件转化成.cs C#脚本?

这个把后缀修改了,就可以,当然内容要调整

如何在Windows环境下的VS中安装使用Google Protobuf完成SOCKET通信

1.下载protobuff,我下的是2.3.0版本最新的protobuf可以到Google Code上下载:http://code.google.com/p/protobuf/downloads/list当前版本为2.3.0,下载两个压缩包:protoc-2.3.0-win32.zip和protobuf-2.3.0.zip,前者是protobuf的编译器,后者包含了有三程序语言的开发包。 2.解压首先解压protoc-2.3.0-win32.zip,把protoc.exe文件放到path路径中,最简单的做法就是把这个文件拷贝到C:/WINDOWS目录下。解压protobuf-2.3.0.zip文件,将文件加压到C盘根目录,主文件位于C:/protobuf-2.3.0/protobuf-2.3.0目录下。 3.安装操作(1)使用VS2005编译proto,VS工程目录位于vsprojects目录中,工程名字为“protobuf.sln”。 (2)选择“生成”à“生成解决方案”选项进行编译,编译过程中可能会由于编译的顺序报错误,可以使用手工逐个顺序编译生成,可能会比较顺利。按照下图的顺序,右键“重新生成”,逐个编译。但是我在实习操作过程中,libprotobuf-lite工程重来都没有成功编译通过过。淡定先,这个不会影响大局的。(3)编译完成会在目录vsprojects下的Debug目录中生成lib和exe文件。生成清单如下:exe文件:2010-04-15 09:51 950,272 lite-test.exe2010-04-15 09:50 3,219,456 protoc.exe2010-04-15 09:48 9,228,288 tests.exe2010-04-15 09:56 2,519,040 test_plugin.exe lib文件:2010-04-15 09:50 2,685,922 libprotobuf-lite.lib2010-04-15 09:56 24,100,794 libprotobuf.lib2010-04-15 09:56 17,302,068 libprotoc.lib其实我在测试过程中,lite-test.exe和libprotobuf-lite.lib并没有生成,因为编译错误了,但这并不影响大局,淡定先。 (4)OK,至此,我们已经完成了编译工作,下面需要进行的是protobuf的测试。我们需要使用到之前VS编译出来的libprotobuf.lib和libprotoc.lib完成一个C/S结构的SOCKET通信测试。 àProtobuf的测试在VS2005下,创建两个新的工程,分别命名为server和client,每个工程都需要引用protobuf的头文件和lib文件。一、添加protobuf头文件操作:右击项目à属性à配置属性àC/C++à常规 (也命令行可在中添加)。具体路径:C:/protobuf-2.3.0/protobuf-2.3.0/src二、添加protobuf的lib文件操作:右击项目à属性à配置属性à链接器à常规(也可在命令行中添加)。具体路径:C:/protobuf-2.3.0/protobuf-2.3.0/vsprojects/Debug三、CMD窗口下编译生成头文件:C:/protobuf-2.3.0/protobuf-2.3.0/examples>protoc -I=./ --cpp_out=./ people.proto将proto文件生成的文件放到当前目录。

解决protobuf忽略空返回值的问题

最近在用Kratos开发项目的时候遇到了问题,repeated类型的字段在值为空的情况下,字段被直接忽略掉了。 我希望的是即使为空的情况下也能返回一个空数组,而不是直接把整个字段忽略掉,就像下面这样: 经过多方排查之后找到了问题所在,google会在生成pb.go文件时在json标签里插入 omitempty 属性,而json库在转换json时一旦遇到这个标签就会忽略掉空字段,这不符合我的需求,所以把这个字段去掉就好了。 先写一个shell脚本来递归遍历api目录下的pb.go文件: 接着修改Makefile文件: 在api的最下面添加替换脚本,流程就是遍历scandir脚本查出来的pb.go文件,替换掉文件里所有的omitempty,然后将文件暂存为.tmp,最后再覆盖原文件。 今后每次执行make api时就会连带自动替换掉所有生成文件中的omitempty,免得每次手动替换麻烦又容易出错。 参考: https://ld246.com/article/1591110788411

模具中PR:PROTO, OT:OFF TOOL, OP:OFF TOOL & OFF PROCESS 上面PR,OT,OP 是什么意思啊!

PR prototype 的缩写吧 未开模产品样件OT 可能指的是 OTS off tooling samples 全状态工装非生产节拍下的样件请说的在具体一点

怎么把.proto格式文件转化成.cs C#脚本?

这个把后缀修改了,就可以

SMT表面贴机中的prototpye调较一般包括哪些参数?

元件品号,位号,坐标,方向,封装尺寸,feeder型号,吸嘴型号,真空压力大小。

如何对 protobuf-lite编程,c++ android

protocol buffer编译器生成 Foo 类,公开地(publicly)派生自 google::protobuf::Message。Foo类是一个实体类;禁止遗留下纯虚的方法没有被实现。除了 Message 中的虚方法之外,非纯虚的方法可以由 Foo 类重载也可以不重载,取决于优化模式。缺省,为了最高的速度, Foo 实现特定protocol buffer版本的所有方法。不管怎样,如果 .proto 文件包含下列行:1 option optimize_for = CODE_SIZE;Foo 将仅重载运行必需的最小方法集合,和依赖于基于反射实现的剩余部分。这意味着减小了生成代码的大小,但也减小了性能。或者,如果 .proto 文件包含:1 option optimize_for = LITE_RUNTIME;Foo 将包含所有方法的快速实现(fast implementations),但是是实现 google::protobuf::MessageLite 接口,仅包含 Message 中所有方法的一个子集。尤其,它不支持描述符(descriptors)或反射。不管怎样,以这种方式生成的代码只需要连接 libprotobuf-lite.so (Windows上是 libprotobuf-lite.lib) 而不是 libprotobuf.so(libprotobuf.lib)。"lite"库比 "full"库(完整的库)要小很多,更适用于资源受限的系统,比如手机。你不应该创建 Foo 的子类。如果你子类化 Foo ,并且重载虚方法,重载可能被忽略,就像很多生成的方法为了提高性能被去虚拟化(de-virtualized)。

protobuf 生成的变量会不会自动销毁

要看具体变量的类型,看个例子吧:在网络游戏中,游戏玩家之间的同步是一个最基本的功能,而同步是通过对坐标的广播进行的,因此我们假设一个简单的模型,当一个玩家的位置发生变化时,将玩家的新位置发给地图内所有玩家,根据这个情况写出以下proto文件。message PlayerPos{ required uint32 playerID = 1; required float posX = 2 ; required float posY = 3 ;}这样就有一个问题,现在的游戏都是3D游戏,因此需要xyz来表示位置,还需要另一组xyz来表示朝向,如果用简单变量的话就会显的很乱,而且无论是位置还是朝向其实都是一组xyz,因此可以将xyz抽出来成为一个复合数据类型,单独放在一个文件中。这样就构成以下文件。file vector.protomessage vector3D{required float x = 1;required float y = 2;required float z = 3;};file Player.protoimport "vector.proto";message PlayerPos {required uint32 playerID = 1;required vector3D pos = 2;};编译的时候先编译vector文件,采用import时需要注意路径,本例中两文件在同一目录下。protoc --cpp_out=. vector.proto Player.protoproto对应的文件已经生成了,但是该怎么赋值呢,查API查了半天有点不知所以,干脆来看生成的类文件的源代码吧 // required uint32 playerID = 1; inline bool has_playerid() const; inline void clear_playerid(); static const int kPlayerIDFieldNumber = 1; inline ::google::protobuf::uint32 playerid() const; inline void set_playerid(::google::protobuf::uint32 value); // required .vector3D pos = 2; inline bool has_pos() const; inline void clear_pos(); static const int kPosFieldNumber = 2; inline const ::vector3D& pos() const; inline ::vector3D* mutable_pos(); inline ::vector3D* release_pos(); inline void set_allocated_pos(::vector3D* pos);上面列出了生成的部分源代码,主要是PlayerPos的操作变量的函数,第一个playID很简单,可以看到直接使用set_playerid ( ) 即可,但是对于嵌套的pos 发现没有对应的set_pos方法,不过发现了一个set_allocated_pos() 函数,这个函数也是set开头的,看看这个函数是干嘛的。 inline void PlayerPos::set_allocated_pos(::vector3D* pos) { delete pos_; pos_ = pos; if (pos) { set_has_pos(); } else { clear_has_pos(); }}看上去可以赋值,直接调用set_allocated_pos() 进行赋值看一看PlayerPos player;vector3D tmp;tmp.x = 1;tmp.y = 2;tmp.z = 3;player.set_allocated_pos(&tmp)编译没问题,但是运行时出现错误,而且是很奇怪的错误,仔细了查看一下PlayerPos的源码,发现一个问题::vector3D* pos_; ::google::protobuf::uint32 playerid_;上面是PlayerPos中变量的保存形式,发现pos是作为一个指针存储的,如果按照之前的赋值 tmp 是一个局部变量,函数返回时局部变量自动销毁,而pos_保存的仍然是已被销毁的tmp的位置,因此会出错,如果采用new的话就可以解决这个问题,即赋值方法如下PlayerPos player;vector3D *tmp = new Vector3D;tmp->x = 1;tmp->y = 2;tmp->z = 3;player.set_allocated_pos(tmp)这样即可,编译运行都没有问题。如此之外,还有一种赋值方法,就是调用mutable_pos()inline ::vector3D* PlayerPos::mutable_pos() { set_has_pos(); if (pos_ == NULL) pos_ = new ::vector3D; return pos_;}mutable_pos () 中自己new出了一个vector3D 对象,而vector3D中又实现了赋值的重载,因此可以这样解决PlayerPos player;vector3D *tmp = player.mutable_pos();tmp->x = 1;tmp->y = 2;tmp->z = 3;

解释一下 从proto-oncogene转变到 oncogene的三种方式

转座:类似于插入突变,就是说转座子的插入使得原来的基因编码发生了突变基因放大:这个可能类似于基因突变中的重复点突变:这个不用详细解释,你懂得,点突变诱发蛋白质变异,导致细胞状态的转变。希望能帮到你。

为什么Protobuf的默认序列化格式没有包含消息的长度与类型

Protobuf 是经过深思熟虑的消息打包方案,它的默认序列化格式没有包含消息的长度与类型,自然有其道理。哪些情况下不需要在 protobuf 序列化得到的字节流中包含消息的长度和(或)类型?我能想到的答案有:如果把消息写入文件,一个文件存一个消息,那么序列化结果中不需要包含长度和类型,因为从文件名和文件长度中可以得知消息的类型与长度。如果把消息写入文件,一个文件存多个消息,那么序列化结果中不需要包含类型,因为文件名就代表了消息的类型。如果把消息存入数据库(或者 NoSQL),以 VARBINARY 字段保存,那么序列化结果中不需要包含长度和类型,因为从字段名和字段长度中可以得知消息的类型与长度。如果把消息以 UDP 方式发生给对方,而且对方一个 UDP port 只接收一种消息类型,那么序列化结果中不需要包含长度和类型,因为从 port 和 UDP packet 长度中可以得知消息的类型与长度。如果把消息以 TCP 短连接方式发给对方,而且对方一个 TCP port 只接收一种消息类型,那么序列化结果中不需要包含长度和类型,因为从 port 和 TCP 字节流长度中可以得知消息的类型与长度。如果把消息以 TCP 长连接方式发给对方,但是对方一个 TCP port 只接收一种消息类型,那么序列化结果中不需要包含类型,因为 port 代表了消息的类型。如果采用 RPC 方式通信,那么只需要告诉对方 method name,对方自然能推断出 Request 和 Response 的消息类型,这些可以由 protoc 生成的 RPC stubs 自动搞定。对于最后一点,比方说 sudoku.proto 定义为:service SudokuService {rpc Solve (SudokuRequest) returns (SudokuResponse);}那么 RPC method Sudoku.Solve 对应的请求和响应分别是 SudokuRequest 和 SudokuResponse。在发送 RPC 请求的时候,不需要包含 SudokuRequest 的类型,只需要发送 method name Sudoku.Solve,对方自知道应该按照 SudokuRequest 来解析(parse)请求。这个例子来自我的半成品项目 evproto。对于上述这些情况,如果 protobuf 无条件地把长度和类型放到序列化的字节串中,只会浪费网络带宽和存储。可见 protobuf 默认不发送长度和类型是正确的决定。Protobuf 为消息格式的设计树立了典范,哪些该自己搞定,哪些留给外部系统去解决,这些都考虑得很清楚。只有在使用 TCP 长连接,且在一个连接上传递不止一种消息的情况下(比方同时发 Heartbeat 和 Request/Response),才需要我前文提到的那种打包方案。(为什么要在一个连接上同时发 Heartbeat 和业务消息?请见陈硕《分布式系统的工程化开发方法》 p.51 心跳协议的设计。)这时候我们需要一个分发器 dispatcher,把不同类型的消息分给各个消息处理函数,这正是本文的主题之一。

Protobuf语法介绍

我们先看看官方文档给出的定义和描述 简单来讲, ProtoBuf 是结构数据序列化方法,可简单类比于,其具有以下特点: 在protobuf中,协议是由一系列的消息组成的。因此最重要的就是定义通信时使用到的消息格式。一个Protobuf 消息(对应JAVA类),由至少一个字段(对应Java类属性)组合而成。 消息的定义很简单,就是message关键字加上消息的名字 字段定义格式: 限定修饰符 | 数据类型 | 字段名称 | = | 字段编码 required: 表示是一个必须字段,必须相对于发送方,在发送消息之前必须设置该字段的值,对于接收方,必须能够识别该字段的意思。发送之前没有设置required字段或者无法识别required字段都会引发编解码异常,导致消息被丢弃。 optional: 表示是一个可选字段,可选对于发送方,在发送消息时,可以有选择性的设置或者不设置该字段的值。对于接收方,如果能够识别可选字段就进行相应的处理,如果无法识别,则忽略该字段,消息中的其它字段正常处理。---因为optional字段的特性,很多接口在升级版本中都把后来添加的字段都统一的设置为optional字段,这样老的版本无需升级程序也可以正常的与新的软件进行通信,只不过新的字段无法识别而已,因为并不是每个节点都需要新的功能,因此可以做到按需升级和平滑过渡。 repeated: 表示该字段可以包含0~N个元素。其特性和optional一样,但是每一次可以包含多个值。可以看作是在传递一个数组的值。类比于Java这边的List protobuf定义了一套基本的数据类型,几乎都映射了Java语言的基础数据类型(主要以Java为例) 详见下面表格 字段的命名方式与Java的命名方式大致一致 字段编码是一个序列化和反序列化的标记值,有了该值,通信双方才能互相识别对方的字段。当然相同的编码值,其限定修饰符和数据类型必须相同。编码值的取值范围为 1~2^32(4294967296) 其中 1~15的编码时间和空间效率都是最高的,编码值越大,其编码的时间和空间效率就越低(相对于1-15),当然一般情况下相邻的2个值编码效率的是相同的,除非2个值恰好实在4字节,12字节,20字节等的临界区。比如15和16 1900~2000编码值为Google protobuf 系统内部保留值,建议不要在自己的项目中使用。protobuf 还建议把经常要传递的值把其字段编码设置为1-15之间的值 完整的消息定义示例 枚举的定义和Java 相同,使用 enum 关键字,但是有一些限制。 枚举值必须大于等于0的整数。 使用分号 ; 分隔枚举变量而不是Java 语言中的逗号 , 示例: 你可以将其他消息类型用作字段类型。已我们现在IM的为例,在每一个CSSendLiveRoomMsgReq消息中包含ImMsgBody消息,此时可以在相同的.proto文件中定义一个ImMsgBody消息类型,然后在CSSendLiveRoomMsgReq消息中指定一个ImMsgBody类型的字段 示例: 如果你的消息中有很多可选字段, 并且同时至多一个字段会被设置, 你可以加强这个行为,使用oneof特性节省内存,Oneof字段就像可选字段, 除了它们会共享内存, 至多一个字段会被设置。 设置其中一个字段会清除其它字段。 为了在.proto定义Oneof字段, 你需要在名字前面加上oneof关键字, 比如下面例子的ImMsgBody: oneof的特性

服装外贸中 proto sample 是什么样衣

16、惠崇《春江晓景》 苏轼

golang gRPC xorm 优雅的解决proto没有int类型?

type Info struct{Age int32 `xorm:" INT(8)"`}字段超多可以从数据库用xorm reverse出来结构,或者直接querystring 得到map[string]string,想怎么处理都行。另外,没太明白你要问什么。

了解一下ProtoBuf

我们在进行网络通信调用的时候,总是需要将内存的数据块经过序列化,转换成为一种可以通过网络流进行传输的格式。而这种格式在经过了传输之后再经过序列化,能还原成我们预想中的数据结构。 那么我们对于这种用于中间网络传输的数据格式就有一定的要求。首先它可以准确地描述数据内容,在此基础上我们则希望它尽量的小。 最开始流行起来的是XML,可扩展标记语言。由于它可以用来标记数据、定义数据类型,所以用户可以自己定义数据自己的语言,从而让对不同的数据结构化成统一的格式称为了可能。 而另外一个我们熟知的则是JSON(JavaScript Object Notation, JS 对象简谱)。尽管JSON中缺少了XML中的标签属性等描述方式,但是足够简介和清晰的层次结构使得其成为了必XML更受欢迎的数据交换格式。 同一份数据显然JSON的数据量比XML所使用的空间更少。那么空间省略在哪里呢?一方面是json使用更简单的字符来定义数据间的关联关系;另一方面是JSON减少了对数据类型的描述。但是丢少的数据类型再哪里呢? 以Java中的 OpenFeign 举例,JSON中缺少的类型定义被定义道程序中的接口中了。当进行序列化与反序列化时,JSON格式并不记录数据的类型,具体的数据类型在序列化方与反序列化方通过事先约定的接口来进行定义。这样就减少了信息传输过程中的信息量,从而让数据得以压缩。 但是JSON由于没有定义数据类型,所以在传输的过程中实际上就都是文本流,那么这种方法还可以进一步压缩吗? 结合上文的讨论,我们先说结论:方法是有的,并写当前的实现方式是ProtoBuf。但在此之前我们先来了解一下ProtoBuf。 我们可以先看看官方给出的定义与描述: 同样的,ProtoBuf也是一种支持序列化反序列化的方法,并且他具有很多优点: 实际上,ProtoBuf提供了一种通用的数据描述方式,这种定义数据的方式是通用的,就如同JSON或者XML一样。 接下来我们来来回答本节一开始的问题,针对JSON来说,ProtoBuf是如何将体积变得更小的呢?答案很简单,就是为数据序列化反序列化提供更多的先验知识。 本文暂不过度深入ProtoBuf原理,但是可以通过一张图来进行简要说明(): ProtoBuf中的数据是按顺序进行排列,而整体的结构为若干个field,每一个field中由 Tag-[Length]-Value 组成。Length是可选的,而是否存在Length是通过Tag的类型来决定的。也就是说如果是指定的类型,比如int64,那我们就可以知道Value的长度,也就不用在依靠Length来对其空间进行描述(redis中的压缩列表也是这个思想)。 那么field应该对应的是什么字段呢?这个则是在序列化与反序列化时在ProtoBuf的服务端与客户端之间进行预先定义的。而因为提前定义了field的类型、排序,所以field本身可以不用对字段名、字段位置进行描述,只需要根据字段类型选用合适的二进制序列化方法,将字段本身的value值进行序列化传输即可。 稍微总结一下: ProtoBuf通过对传输字段的名称、顺序进行预定义,从而在传输结构中只需要顺序的记录每个字段的类型标签和二进制值。 尽管上文和官方中都是以XML或者JSON来对ProtoBuf进行对比。但是因为ProtoBuf本身就是二进制序列化方式,所以从压缩比上比较感觉有点欺负人。 对应的在Java中二进制常用的序列化器有Kryo和Hessian。但事实上,由于Kryo和Hessian中都需要对Java类名和字段信息进行存储。而ProtoBuf则只有Tag-Length-Value的数据对,且Value更是有针对性的特殊编码,所以空间占用小的很多。 Kryo是专门针对Java进行优化了的。所以在使用的便捷性上来说Kryo则更加方便。但ProtoBuf是跨平台的,且由于进行了字段的顺序定义,所以似的ProtoBuf定义后的接口是可以向前兼容的(只向后追加字段),而这种优势是Kryo所没有的。 ProtoBuf是跨语言的,使用ProtoBuf的第一步是先定一个 proto 文件 ,而由于ProtoBuf 2和3语言版本的不同,其定义格式会有所不同,具体的细节还是得参考官方文档:https://developers.google.cn/protocol-buffers/docs/proto3 对于ProtoBuf 3 的定义文档我们可以按如下方法定义: 其中message关键字是定义的文件名,而 string、int32则是预定的字段类型,repeated则是描述字段为可重复任意多次的字段。 ProtoBuf通过这种形式的文件定义了传输信息的文件结构。 但是之前小节中我们知道了ProtoBuf是通过 Tag-[Length]-Value 组成的数据组来进行信息传输的,那么proto文件中定义的内容如何转换为实际传输的对象呢? ProtoBuf的做法是,为每一种语言提供一个生成器protoc。通过使用protoc则可以根据.proto文件生成为一组java文件。对应的官方语法演示样例为: 官方的生成参考为:https://developers.google.com/protocol-buffers/docs/reference/java-generated 生成后的java文件将提供对应的实体以及数据的构造方法等文件,从而支持后续的使用。 需要注意的是,ProtoBuf是本质上是序列化方法,具体是通过Spring Cloud 的OpenFeign进行接口调用,还是通过grpc进行接口调用,都是可以的。 本文对ProtoBuff进行了概念的整理,并没有对每个细节都进行深入的梳理,可以当作概念科普来进行阅读。

protobuffer 怎么输出

在网上查了一下,虽然有很多文章介绍Protocol Buffer,但是实际使用起来,还是会遇到很多问题,所以我想应该有一个指南一样的东西,让新手很快就能使用它。Protocol Buffer简写为Protobuf,是Google开发的一种储存数据的方式,功能与XML一样,但更方便,数据量更小,速度更快,在序列化和反序列化的时候使用,有很大的优势。比如,网络游戏的通讯协议编写。更重要的是,它是一个开源项目。由于Protobuf不能生成C#代码,所以就要用到另外一个开源项目protobuf-net,用法是,在命令行用protoc.exe依据你自己定义的.proto文件,来生成.cpp文件用protobuf-net的protogen.exe来生成.cs文件,可以写一个批处理,如下:protoc -I=. --cpp_out=. Net.proto //在当前目录下,以cpp方式编译Net.protoprotogen -i:Net.proto -o:Net.cs //在当前目录下,用Net.proto生成Net.cs其实两句功能是一样,只是分别生成了Net.proto的cpp文件和cs文件,这样就可以在两种语言编写的应用程序间通信了。

File does not reside within any path specified using --proto_path

使用--proto_path=. --swift_out=. ***.proto 生成swift文件时 报错: File does not reside within any path specified using --proto_path (or -I). You must specify a --proto_path which encompasses this file. Note that the proto_path must be an exact prefix of the .proto file names -- protoc is too dumb to figure out when two paths (e.g. absolute and relative) are equivalent (it"s harder than you think). 给出明确的路径就可以了,如: protoc --proto_path=/Users/Mac/Documents --swift_out=/Users/Mac/desktop ***.proto

ProtocolBuffer浅析

ProtocolBuffer是google 定义的一种数据交换的格式,它独立于语言,独立于平台。google 提供了多种语言的实现:java、c#、c++、go 和 python,每一种实现都包含了相应语言的编译器以及库文件。ProtocolBuffer类似于xml、json,不过它更小、更快、也更简单。 目前使用最广泛的数据传输协议为JSON,JSON是一种轻量级的数据交换格式而且层次和结构比较简单和清晰,这里主要对比一下Protocol Buffer和JSON的对比,给出优势和劣势: 优势 劣势 实际数据对比 Protocol Buffer的使用流程总体可以分为三步,如下图所示: google推荐在Android项目中使用lite版,lite版本生成的java文件更加轻量,其配置如下: 首先创建一个.proto文件,并且在文件中声明如下内容: 在整个proto文件中数据类型分为基本类型和结构类型,其中结构类型主要为: 下面分别介绍一下不同结构的作用及规定: message表示一个结构,类似于java中类,一个proto文件中可以声明多个message结构: message可以引用不同proto文件中的message,只要在proto文件中的最上面声明import即可,如下所示: enum使用很简单,直接在message中声明enum结构体并且将属性声明为对应的enum即可: 在proto3中,enum第一个值必须为0,主要是为了和基础类型的默认值保持一致 map是proto3新加的,使用也很简单: 如下 repeated修饰的属性类似于jsonArray,也类似于java中的List,该修饰符在格式正确的消息中可以重复任意次(包括0次) 日常开发过程中,由于需求的变更,往往需要增加字段,这就涉及到字段的扩充,字段扩充需要达到一个目的: 兼容 所以Protocol Buffer在字段扩充中定义了如下规则: 只要记住上述规则,就能完成字段扩充且老版本也能兼容 Protocol Buffer 更快更小的主要原因如下: 上面这个例子中,在序列化时,"name" 、"count"的key值不会参与,由编号1、2代替,这样在反序列化的时候直接通过编号找到对应的key就可以。需要注意的是编号一旦确定就不可以更改,服务端和客户端通过proto通信的时候需要提前定义号数据格式。 其中Length不一定有,依据Tag确定,例如int类型的数据就只有Tag-Value,string类型的数据就必须是Tag-Length-Value。 Protocol Buffer定义了如下的数据类型,其中部分数据类型已经不再使用: 上面已经介绍了Protocol Buffer的数据结构及Tag的类型,但是Tag块并不是只表示数据类型,其中数据编号也在Tag块中,Tag的生成规则如下: 其中Tag块的后3位表示数据类型,其他位表示数据编号 Java中整数类型的长度都是确定的,如int类型的长度为4个字节,可表示的整数范围为-2 31——2 31-1,但是实际开发中用到的数字均比较小,会造成字节浪费,可变长度编码就能很好的解决这个问题,可变长度编码规则如下: 举个例子: 其中第一个字节由于最高位为1,则后面的字节也是前面的数据的一部分,第二个字节最高位为0,则表示数据计算终止,由于Protocol Buffer是低位在前,整体的转换过程如下: 10000001 00000011 ——> 00000110000001 表示的10进制数为:2^0 + 2^7 + 2^8 = 385 通过上面的例子可以知道一个字节表示的数的范围0-128,上面介绍的Tag生成算法中由于后3位表示数据类型,所以Tag中1-15编号只占用1个字节,所以确保编号中1-15为常用的,减少数据大小。 可变长度编码唯一的缺点就是当数很大的时候int32需要占用5个字节,但是从统计学角度来说,一般不会有这么大的数. 上面介绍了Protocol Buffer的原理,现在通过实例来展示分析过程,我们定义的proto文件如下: 其序列化后的字节数据如下: 前面介绍过Protocol Buffer的 数据结构为TLV,其中L不是必须的,根据T的类型来确定 先看下第一个字节: 这里字节最高位为0,所以该Tag就用这一个字节表示,其中后3位表示类型,前面表示字段编号,所以: 这里字节最高位为0,所以该Tag就用这一个字节表示,其中后3位表示类型,前面表示字段编号,所以: file_num = 0001 = 1 type = 010 = 2 上面介绍过type=2,则后面有Length,按照可变长度编码规则,知道表示长度的字节为: 所以Length=4,则value的长度是4个字节,直接取出后面4个字节: 这4个字节对应的就是test 再看下一组: 由上面的Tag知道: file_num=2 type=0 前面介绍过type=0,后面没有Length,直接就是value, value=1,通过上面的解析可以知道 上面介绍了Protocol Buffer的原理,解释了为什么Protocol Buffer更快,更小,这里再总结一下: 参考资料: proto3官网指南: https://developers.google.com/protocol-buffers/docs/proto3 protobuf-gradle-plugin: https://github.com/google/protobuf-gradle-plugin 博客: https://juejin.im/post/5dcbf630e51d451bfe5bb21b

python grpc如何给proto文件中map类型的变量赋值?

改完之后,你可以选择project->clean,clean后你项目的R.java文件就会重新生成,所有的资源ID会重新分配,这样子你所修改的资源才能被Android真正识别,有时这个操作不是必要的,但是如果出现你修改了资源后,你的项目中出现了一些问题,那么执行Clean是一个必须的选择,这些资源包括drawable下的图片,布局里id的修改,values下资源的修改,你可以着手试一下 Good luck

原始汉语(Proto-Chinese)从原始汉藏语分出以后,由SOV到SVO的语序变化是怎么出现的?

殷商的更SVO,而周人的更SOV。殷商的语序来源,暂时不太清楚。而周人因为更加靠近藏语、一些羌族人的语言,所以在几百年的语言接触中,语法受到影响。一般,两种语言接触融合,会保留强势语言的词汇,而保留弱势语言的语法。这种语序作为语法的一部分被周人所接受。后来周人又重新入住中原,推翻了殷商人,将他们的语言,确切的说,是姬姓王室,带回了中原。但是,随后他们又雅言化了,又变成以SVO为主,这需要一定是历时材料的梳理。这一点,先秦文献,可以看出一点端倪。比如,诗经中不同的国家的用词有所不同。安大简出土的诗经中,只有姬姓诸侯国,会采用"言",作为第一人称代词。(当然,也有人认为安大简是伪造的。所以材料还是存疑)如果能够继续在各种文献中找到一批这样的现象,上古汉语的两层基本可以坐实。在这个框架下,可以进一步弄清楚题主的问题。

Protobuf 数据格式

简单来说, Protocol Buffers 是一种和语言平台都没关的数据交换格式。 关于 Protobuf 在iOS下的使用请看上篇文章 iOS 的 Protocol Buffer 简单使用 Protobuf 序列化后的二进制数据消息非常的紧凑,这得益于 Protobuf 所采用的 Varint Varint 是一种紧凑的表示数字的方法,它用一个或多个字节来表示一个数字,值越小的数字使用越少的字节数。这能减少用来表示数组的字节数。 比如对于 int32 类型的数字,一般需要4个 byte 来标识。但是采用 Varint,对于很小的 int32 类型的数字,也能用1个 byte 来标识。如果数字很大,也就需要5个 byte 来表示了。但是,一般情况下很少会出现数字都是大数的情况下。 正常情况下,每个 byte 的8个 bit 位都用于存储数据用,而在 Varint 中,每个 byte 的最高位的 bit 有着特殊的含义,如果该位为1,表示后续的 byte 也是该数据的一部分;如果该位为0,则结束。其他的7个 bit 位都用来表示数据。因此小于127的 int32 数字都可以用一个 byte 表示,而大于等于 128 的数字:如128,则会用两个字节表示: 1000 0000 0000 0001 (采用的是小端模式),311则表示: 1011 0111 0000 0010 下图演示了 Protobuf 如果通过2个 byte 解析出 128。Protobuf 字节序采用的是 little-endian(小端模式) int32 数据类型能表示负数,负数的最高位为1,如果负数也使用这种方式表示会出现一个问题,int32 总是需要5个字节,int64 总是需要10个字节。所以 Protobuf 定义了另外一种类型 sint32, sint64,采用 ZigZag 编码,所有的负数都使用正数表示,计算方式为: Protobuf 消息是一系列的键值对组成。消息的二进制版本仅使用 field 数字当作 key,不同 field 的属性和类型只能通过消息类型的定义 (即 .proto 文件) 在解码端确定。如果消息中不存在该 field,那么序列化后的 Message Buffer 中也不会有该 field,这些特性都有助于节约消息本身的大小。 Key 用来标识具体的 field,在解包的时候,Protobuf 根据 key 就能知道相应的 Value 对应于消息中的哪一个field,数据类型是哪个类型。 Key 的定义如下: Key 由两部分组成:第一个部分是 field_number,比如上篇文章定义的消息 FooSimpleMessage 中的 msgId 属性的 field_number 为1;第二部分为 wire_type,表示 Value 的传输类型 表1. Wire Type 在之前的例子中,msgId 采用的数据类型为 int32,因此对应的 wire_type 为0,所以对应的 tag 为 FooSimpleMessage 的 msgContent,field_number 为2,wire_type 为2,所以对应的 tag 为 对应 Length-delimited 的 wire type,后面紧跟着的 Varint 类型表示数据的字节数。所以 msgContent 的 key 后面紧跟着的 0x1a 表示后面的数据长度为10个字节,"A protobuf message content" 的 ASCII 值即为: 0x41 0x20 0x70 0x72 0x6f 0x74 0x6f 0x62 0x75 0x66 0x20 0x6d 0x65 0x73 0x73 0x61 0x67 0x65 0x20 0x63 0x6f 0x6e 0x74 0x65 0x6e 0x74 在 Demo 里面定义的 msg 对象,其序列化后的数据的十六进制表示应该为 0801121a 41207072 6f746f62 7566206d 65737361 67652063 6f6e7465 6e74 运行demo,打印一下结果和猜想的一样: 参考地址: Protocol-buffers Encoding

无 proto文件即不知道服务端的.proto文件格式 客户端能不能解析成普通易懂的string

Protocol Buffers的是一个高效且可扩展的格式结构化数据编码的一种方式。谷歌使用了Protocol Buffers的几乎所有它的内部RPC协议和文件格式使用protobuf传输的好处有:二进制传输,安全、数据量小.proto文件中我们服务器定义需要传输的数据,及数据类型等。而传输的时候则是使用了通过官方工具生成的具体为.java的消息体

wireshark内置支持protobuf吗

只要你装了WINPCAP 就可以自己编程抓包,或使用wireshark抓包了。但是无线网卡好像无法通过winpcap抓包,具体如何实现无线网卡抓包,还没有研究过。6930p自带网卡绝对可以抓包,我开发网络抓包程序就是通过笔记本实现的,网卡也是我的三星笔记本自带的。

Swift 安装protobuf

1、官方项目地址: https://github.com/apple/swift-protobuf 2、拉取项目到本地 3、进入项目本地路径,查看版本 4、根据项目需要,选择版本编译 如:1.5.0 5、构建项目 6、构建完成之后会生成一个 protoc-gen-swift 执行路径:swift-protobuf/.build/release/protoc-gen-swift7、把protoc-gen-swift文件直接拷贝到/usr/local/bin目录下 8、swift版本的protobuf已安装完成,现在可以来测试使用 准备一个proto文件(Book.proto) 9、生成swift文件 10、把生成的Book.swift文件拖入到项目中就可以使用了

为什么google protobuf不支持map的序列化和反序列化

现在它是支持的。proto2的文档就已经提到了Maps(Language Guide),但我用protoc2.6编译的时候,map关键字无法通过编译,protoc3.0编译正常,proto举例:message Person { required int32 id = 1; required string name = 2; optional string email = 3; map<string, string> values= 4; } 另外,官方文档(https://developers.google.com/protocol-buffers/docs/proto#Maps)说了:The map syntax is equivalent to the following on the wire, so protocol buffers implementations that do not support maps can still handle your data:message MapFieldEntry { key_type key = 1; value_type value = 2;}repeated MapFieldEntry map_field = N;

怎么将protobuf string类型

2.下载一个protobuf-java-2.4.1.jar文件(注意,要与你刚才下的proto.exe版本相同)然后就开始开发了。步骤:1.用记事本编写一个.proto文件:}如:编写的是test.proto package protobuf; option java_package = "com.sq.protobuf"; option java_outer_classname = "FirstProtobuf"; message testBuf { required int32 ID = 1; required string Url = 2; }将其放在与刚解压的protoc.exe同级目录中。2.在cmd中,到protoc-2.4.1-win32文件夹下,执行E:protoc-2.4.1-win32> protoc.exe --java_out=./ test.proto 则可以找到的一个生成的FirstProtobuf.java文件。3.在MyEclipse中新建一个java project,建立包com.sq.protobuf,然后将刚才生成的FirstProtobuf.java文件放在其下面。此时会报错,因为没有引入jar包,在package视图下,将protobuf-java-2.4.1.jar引入,即可解决问题。

一个案子Proto阶段的定义是什么?需要做些什么?proto后面是EVT,DVT,PVT

打样, 料件及整机模具开发调试阶段

c#实体转成proto message

经常会遇到把一个实体转化成另一个实体这样的情况,实体的属性一个一个手写去转化不反对,但不是啥好的方法;可以使用反射写一个通用的实体转化类,针对任何实体转化,不用再去自己手写。虽然Grpc.Tools可以将proto文件自动生成代理类,但是proto文件的手敲,还容易出错,如果接口比较复杂,定义比较多,这就很头疼了。为了解决这个问题Class2Proto诞生了,使用标准C#对象转换成proto文件,不管是新写的接口,还是老的API接口转Grpc,都没问题:1、安装nuget包:CRL.Class2Proto 2、using CRL.Class2Proto; 定义标准接口代码;运行转换方法生成proto文件;程序目录Protos成生了protoTest.proto文件

proto-horse什么意思?

proto-horse原马proto [词典] 原型机,样机;[网络] 原; 普罗托; 协议;[例句]What"s Generated From Your. proto?从你的.proto文件生成了什么?horse 英[hɔ:s]美[hɔ:rs]n. 马; 骑马的军人,骑兵; 有脚的架; 跳马,鞍马;vt. 为…备马; 猛推或用力向上举;vi. 欲交配,,用于母马;[网络] 黑马; 跳马; 房子;[例句]A small man on a grey horse had appeared.一个骑着灰马的小个子男人出现了。[其他] 第三人称单数:horses 复数:horses 现在分词:horsing 过去式:horsed 过去分词:horsed

protobuf repeated 怎么用的

protobuf repeated类型的使用protobuf是Google开发的一个序列化框架,类似XML,JSON,基于二进制,比传统的XML表示同样一段内容要短小得多。通过protobuf,可以很轻松的调用相关方法来完成业务数据的序列化与反序列化。protobuf repeated类型相当于std的vector,可以用来存放N个相同类型的内容,文章将简单介绍protobuf repeated的使用。首先定义一个protobuf结构,如下:message Person { required int32 age = 1; required string name = 2;}message Family { repeated Person person = 1;}下面以例子简单说明如何使用:int main(int argc, char* argv[]){ GOOGLE_PROTOBUF_VERIFY_VERSION; Family family; Person* person; // 添加一个家庭成员,John person = family.add_person(); person->set_age(25); person->set_name("John"); // 添加一个家庭成员,Lucy person = family.add_person(); person->set_age(23); person->set_name("Lucy"); // 添加一个家庭成员,Tony person = family.add_person(); person->set_age(2); person->set_name("Tony"); // 显示所有家庭成员 int size = family.person_size(); cout << "这个家庭有 " << size << " 个成员,如下:" << endl; for(int i=0; i<size; i++) { Person psn = family.person(i); cout << i+1 << ". " << psn.name() << ", 年龄 " << psn.age() << endl; } getchar(); return 0;}

android studio的proto文件放在哪

方案是:1、在build.gradle中增加dependencies { compile fileTree(dir: "libs", include: ["*.jar"]) compile group:"com.google.protobuf",name:"protobuf-java",version:"2.5.0" //这个是关键的一句话,对于这个version是从你的本地maven存放的目录, 进入到 .m2 epositorycomgoogleprotobufprotobuf-java目录下,看到的那个数字文件夹的名字,就是你的version,

在proto 中如何将字符串封到bytes

Configuration conf = HBaseConfiguration.create(); String tableName = "testTable"; Scan scan = new Scan(); scan.setCaching(10000); scan.setCacheBlocks(false); conf.set(TableInputFormat.INPUT_TABLE, tableName); ClientProtos.Scan ...

protobuf 怎么查看版本

protobuf版本需要在protobuf程序中查看。在protobuf程序中查看版本步骤如下所示:1、点击打开计算机,进入分区列表。2、在计算机分区列表中选择protobuf程序所在的文件夹。3、点击打开protobuf程序。4、如图所示在protobuf程序中,即可完成protobuf版本查看。

PROTO什么意思

PROTO原abbr.protoporphyrinogen 原卟啉原,初卟啉原; 答题不易答案满意采纳谢谢思密达ps:如有问题继续追问

javascript中_proto_和__proto__的区别?左边是一条下划线,右边是两条下划线

这仅仅表示是两个不同的变量名而已,与下划线没什么必然的关系。下划线在这里就是变量名的一个组成部分而已,可以换成其他任意的字母或数字(但开头第一个下划线只能换成字母不能是数字),用下划线仅仅是程序设计者的个人爱好而已。你如果想偷懒,你甚至可以直接用a和b来分别作为两个变量名的。

protobuf可变长度原理

这篇文章在你已经了解protobuf使用的基础上,更进一步的学习,如果不知道protobuf是什么?请查阅这篇文章 【golang-protobuf使用】 官网说明地址: https://developers.google.com/protocol-buffers/docs/proto3 proto文件的可变长度类型有:int32、int64、uin32、uin64、sint32、sint64 Protobuf 用的是连续位标识技术,使用每个字节的第一位来标识是否需要继续向后读。每个字节低7位用于实际的编码。 举例: 十进制:300 二进制(4个字节):00000000 00000000 00000001 1000000 protobuf编码过程 所以最终编码结果为 1 0000000 0 1100000,这样将4字节存储大小转化为2字节存储大小 目标:将10^32bit的二进制进行编码 proto文件格式 测试结果: 由测试结果可得如果高位(左边)字节为0,编码结果大小相应减少

protobuf 怎么查看版本

protoc --version

proto3怎么判断字段是否被赋值

客户端lua,通信协议是protobuf,以前用网易的proto-gen-lua,使用过程遇到些问题需要绕,比如: 1、每次更改、增加proto都要生成新的文件,代码规模剧增 2、由于lua本身,每个文件最大文件内全局local变量不能超过200个,所以当proto规模太大时...

怎样用正则表达式删除PROTO及紧跟的()? 例void PROTO(main)(void)变为void main(void)却不删除main

s/PROTO([^.]+)/$1

proto 没有set

protobufrepeated的数据类型和C++的Vector,list类似,只能传输相同的数据类型。当然,如果你为了传输多种数据类型,可以使用类似与C++union的方式,用个大消息,消息的每个字段都使用optional标记,你在业务处理的时候,每次只对一个字段赋值同样可以达到目的。另外:repeated只能表示数据有还是没有,在没有的时候,究竟是保留原有的数据不动,还是删除所有数据,这点有歧义。需要使用另外的字段进行处理。

linux ping命令中的struct proto

可以使用,相当与函数地址作为一个常量值赋值给结构体变量函数proto_v4 = { proc_v4, send_v4, NULL, NULL, 0, IPPROTO_ICMP };等同于:proto_v4 = { &proc_v4, &send_v4, NULL, NULL, 0, IPPROTO_ICMP }即取函数地址指针。

Protocol Buffers(Objective-C)踩坑指南

这篇文章是讲如何把protobuf文件的编译工作集成到Xcode中,达到在Xcode中就像添加一般的OC文件一样不进行任何多余的操作直接编译运行.proto文件的目的。 牛逼,这么智能吗?是的,就是这么智能! 笔者的公司现在所有端都在统一使用一套protobuf数据结构,免除了多端重复定义同一套数据结构的重复工作,效率很高,非常值得推荐。并且Xcode 10进行了一些小优化来增加了对Protobuf的支持,相信不久以后,Xcode对Protobuf的支持将更加智能! 至于什么是 Protobuf 和 Protobuf 语法教程,不是这篇文章的主题,请自行Google。 环境:Xcode 10+ 语言:Objective-C 话不多说,正题开始: 首先,真正的企业级项目,并不只是网上很多教程里面演示的一两个 .proto 文件,而是一批 .proto 文件目录的集合,并且是多端共享的。你会发现按照那些教程里面的讲的去做写个demo或许可以,但是真正要达到企业级别的使用的时候,还远远不够,你会遇到各种各样的坑。别问我是怎么知道的,我都是靠自己一个个踩出来的。 首先,要能编译Protobuf文件,我们得安装官方的编译器。你可以选择下面任意一种你喜欢的安装方式: 安装好后,在terminal中输入 which protoc 检测是否安装成功,如安装成功会返回文件路径: /usr/local/bin/protoc 如有问题,请自行google,不在本教程范围内。 没什么好说的,新建一个Xcode工程。使用Cocoapods引入Protobuf的库: Pod search Protobuf 选择最稳定的版本即可。 这里有两种创建.proto文件的方式: 至于文件内容,如果你熟悉protobuf语法,那随便写几行即可,如果不熟悉,那么可以copy我的测试内容: A.proto 文件内容: B.proto 文件内容: Xcode 自己并不认识 .proto文件,所以并不会自动编译它们,我们需要把 .proto编译器 自己集成到项目当中,集成的方式如下: Project --> Build Rules --> 点击+号 ,生成一个特定文件类型编译脚本。 比如: 到此处,我们有几个注意事项: 我们试试把 --proto_path 换成相对路径,看会发生什么,也就是把脚本换成 编译运行,咦~报错了。查看日志,我们可以看到这么一条log信息: 翻译过来就是在--proto_path这个参数中你必须指定.proto源文件的精确路径, protoc 太笨了,它无法搞清楚这个相对路径是不是我们要的绝对路径。google的工程师说这太他么难了。所以这里很明确了, --proto_path 的参数值,只能是proto文件根目录的绝对路径。 我们上面说了,${INPUT_FILE_PATH} 是代表编译输入源文件的绝对路径。 文档里面给的demo是: protoc --proto_path=src --objc_out=build/gen src/foo.proto src/bar/baz.proto 什么意思呢? 它说,最终编译器会把 src/foo.proto 文件编译成: build/gen/Foo.pbobjc.h 和 build/gen/Foo.pbobjc.m 文件。 而会把 src/bar/baz.proto 文件编译成 build/gen/bar/Baz.pbobjc.h 和 build/gen/bar/Baz.pbobjc.m 。 而不是 build/gen/Baz.pbobjc.h 和 build/gen/Baz.pbobjc.m 也就是说protobuf编译器最终生成的文件会自动按照文件源目录结构存放。 特别强调 并不会 自动创建 build/gen 目录,这个目录需要你提前建好。 并且,查看最终编译生成的.m文件,你会发现一些有趣的事情;比如我在A.proto中引入了B.proto文件,你会看到Protobuf最终编译出来的A.pbobjc.m文件导入文件的格式是包含文件路径的,例如: 我们注意到,上面设置的proto文件的编译输出路径是 $DERIVED_FILE_DIR , 这是为何呢? 答案是为了方便Xcode的集成。 对于自定义的编译脚本,都需要设置一个文件的输出路径. 我们点脚本框下面的Output Files下面的 + 号, 指定文件输出路径。 因为OC文件分为.h和.m文件,所以我们指定2个。 点了之后,你会发现,xcode默认给出的是 $(DERIVED_FILE_DIR)/newOutputFile , 我们将其改为 $(DERIVED_FILE_DIR)/${INPUT_FILE_BASE}.pbobjc.h 和 $(DERIVED_FILE_DIR)/${INPUT_FILE_BASE}.pbobjc.m ,并且在.m文件的 Compiler Flags 中指定为 -fno-objc-arc 代表该.m文件采用mrc编译。 编译运行,大功告成,是不可能的!!!! 你会发现又报错了: 什么意思呢? 其实就是在 DerivedSources 下找不到 A.pbobjc.m 文件。因为我们指定这个编译的输出路径在这个目录下,所以Xcode在进行OC文件的编译时会去这个目录下找,但是它找不到。为什么找不到呢?我们去这个目录下看,这个目录下确实没有 A.pbobjc.m 这个文件,但是确发现有 a/A.pbobjc.m 。原因我们已经说了,protoc最终的编译文件会自动加上目录前缀。 有人可能会说,能不能把输出文件改成 $(DERIVED_FILE_DIR)/*/${INPUT_FILE_BASE}.pbobjc.h 呢?那我们就来试下。 编译运行 what the hell? 原来,Xcode的Output Files特别蠢,它不支持类似这种通配符写法: $(DERIVED_FILE_DIR)/*/${INPUT_FILE_BASE}.pbobjc.h 。 也不支持传入任何的自定义变量。 只能是明确的文件路径和Xcode自带的环境变量,但是实际项目中,可能不只一层路径,有可能是文件夹下嵌套文件夹。 靠,那这怎么办呢? 实在没办法了,就在打算放弃的时候,咨询了我们的脚本大神,我们尝试了以下在脚本末尾再加了两行: 是不是很机智? 什么意思呢?就是说我们cd到该目录,然后找到该文件对应生成的oc文件,将其copy一份儿到根目录。怀着求神拜佛的意志,运行了以下,Perfect,终于不再报错了,到目录中查看,也正是我们想要的,所有文件都被copy出来了。 下一步,就是正常的在项目中import和使用了。 你以为到此就没有坑了吗?到此还有坑。有2点需要注意: 好了,就讲到这里吧,如果觉得文章看得不是很明白,需要一个demo。或者大神有更好的建议,请在评论区留言~ 如果文章对你有帮助,请不要吝啬你的点赞哦,你的支持是我分享的动力~ 如果大家喜欢,有时间再讲讲怎么改改AFNetworking,能直接请求后端给的 Protobuf 格式的数据~

vue使用protobuf+websocket

我的教程是用protobuf生成了proto.js文件 1、运行npm install protobufjs --save 安装 2、拿到后台给的proto文件,在src里创建一个proto目录,用于存放proto文件及编译后的js文件 proto 3、运行命令 生成proto.js文件,如图 4、使用 websocket返回的数据是model.data 官方git教程 https://github.com/protobufjs/protobuf.js

.proto 文件怎么生成.h文件

打开命令行程序,输入如下语句: protoc -I=../script --cpp_out=../protoc ../script/Package.proto 将会产生两个名为Package.pb.cc和Package.pb.cc的文件。

为什么google protobuf不支持map的序列化和反序列化

现在它是支持的。proto2的文档就已经提到了Maps(Language Guide),但我用protoc2.6编译的时候,map关键字无法通过编译,protoc3.0编译正常,proto举例:message Person {required int32 id = 1;required string name = 2;optional string email = 3;map<string, string> values= 4;} 另外,官方文档(https://developers.google.com/protocol-buffers/docs/proto#Maps)说了:The map syntax is equivalent to the following on the wire, so protocol buffers implementations that do not support maps can still handle your data:message MapFieldEntry {key_type key = 1;value_type value = 2;}repeated MapFieldEntry map_field = N;

python如何通过protobuf实现rpc

由于项目组现在用的rpc是基于google protobuf rpc协议实现的,所以花了点时间了解下protobuf rpc。rpc对于做分布式系统的人来说肯定不陌生,对于rpc不了解的童鞋可以自行google,这里只是做个简单的介绍。rpc的主要功能是让分布式系统的实现更为简单,为提供强大的远程调用而不损失本地调用语义的简洁性。为了实现这个目标,rpc框架需要提供一种透明调用机制让使用者不必显示区分本地调用还是远程调用。rpc架构涉及的组件如下:客户方像调用本地方法一样去调用远程接口方法,RPC 框架提供接口的代理实现,实际的调用将委托给代理RpcProxy 。代理封装调用信息并将调用转交给RpcInvoker 去实际执行。在客户端的RpcInvoker 通过连接器RpcConnector 去维持与服务端的通道RpcChannel,并使用RpcProtocol 执行协议编码(encode)并将编码后的请求消息通过通道发送给服务方。RPC 服务端接收器 RpcAcceptor 接收客户端的调用请求,同样使用RpcProtocol 执行协议解码(decode)。解码后的调用信息传递给RpcProcessor 去控制处理调用过程,最后再委托调用给RpcInvoker 去实际执行并返回调用结果。protobuf rpc在上面组件中主要扮演RpcProtocol的角色,使得我们省去了协议的设计,并且protobuf协议在编码和空间效率都是上非常高效的,这也是很多公司采用protobuf作为数据序列化和通信协议的原因。同时protobuf rpc定义了一个抽象的rpc框架,如下图所示:RpcServiceStub和RpcService类是protobuf编译器根据proto定义生成的类,RpcService定义了服务端暴露给客户端的函数接口,具体实现需要用户自己继承这个类来实现。RpcServiceStub定义了服务端暴露函数的描述,并将客户端对RpcServiceStub中函数的调用统一转换到调用RpcChannel中的CallMethod方法,CallMethod通过RpcServiceStub传过来的函数描述符和函数参数对该次rpc调用进行encode,最终通过RpcConnecor发送给服务方。对方以客户端相反的过程最终调用RpcSerivice中定义的函数。事实上,protobuf rpc的框架只是RpcChannel中定义了空的CallMethod,所以具体怎样进行encode和调用RpcConnector都要自己实现。RpcConnector在protobuf中没有定义,所以这个完成由用户自己实现,它的作用就是收发rpc消息包。在服务端,RpcChannel通过调用RpcService中的CallMethod来具体调用RpcService中暴露给客户端的函数。介绍了这么多,对于怎么样用protobuf rpc来实现一个rpc肯定还是一头雾水吧,下面就用protobuf rpc来实现一个简单的python版rpc demo吧。下面直接给出demo描述PRC的proto文件,至于proto文件的编写规则可以参考protobuf官网。common.proto文件:package game;message RequestMessage{ required string message = 1;}message ResponseMessage{ required string message = 1;}game_service.proto文件:package game;import "common.proto";option py_generic_services = true;service GameService{ rpc connect_server(RequestMessage) returns(RequestMessage);}common.proto文件描述了RPC中收发的消息;game_service.proto描述了服务器导出的connect_server函数,该函数接受RequestMessage对象作为参数,并返回RequestMessage对象。在使用PRC协议时,必须加上option py_generic_services = true;可选项,要不然编译器不会生成包含connect_server函数的GameService描述。使用编译器protoc编译proto文件,具体命令为:protoc.exe --python_out=. game_service.proto编译后生成的文件为game_service_pb2.py,该文件主要是实现了GameService和GameService_Stub类。GameService_Stub类用于客户端调用者来调用GameService的服务。前面已经说了,在客户端,RpcChannel只实现了一个空的CallMethod,所以需要继承RpcChannel重新这个函数来encode消息和发送消息。在服务端RpcChannel需要调用CallMethod来调用Service中的函数。具体实现如下:class MyRpcChannel(service.RpcChannel): def __init__(self, rpc_service, conn): super(MyRpcChannel, self).__init__() self.logger = LogManager.get_logger("MyRpcChannel") def CallMethod(self, method_descriptor, rpc_controller, request, response_class, done): """"protol buffer rpc 需要的函数,用来发送rpc调用""" self.logger.info("CallMethod") cmd_index = method_descriptor.index assert(cmd_index < 65535) data = request.SerializeToString() total_len = len(data) + 2 self.conn.send_data("".join([pack("最后就是继承GameService,并实现connect_server函数了。class GameService(game_service_pb2.GameService): def __init__(self): self.logger = LogManager.get_logger("GameService") def connect_server(self, rpc_controller, request, callback): self.logger.info("%s", request.message) 至于用于网络收发消息的RpcConnector,可以使用python的asyncore库实现,具体实现在这就不讨论了。从上面的实现来看,protobuf rpc的实现主要包括编写proto文件并编译生成对应的service_pb2文件,继承RpcChannel并实现CallMethod和调用Service的CallMethod,继承Service来实现暴露给客户端的函数。

java中.proto文件怎么用

用cd命令打开文件所在目录,例如文件在E: oolsComputerprotoc-2.5.0-win32下cmd命令:e:E:>cd tools

为什么Protobuf的默认序列化格式没有包含消息的长度与类型

编译后protobuf形成对应的文件,加入工程,创建你的消息对象,给里面的成员赋值,然后将这个对象转化为字节流,用socket函数直接write出去即可。

Google protobuf中的ByteString怎么转化成为string类型

2.下载一个protobuf-java-2.4.1.jar文件(注意,要与你刚才下的proto.exe版本相同)然后就开始开发了。步骤:1.用记事本编写一个.proto文件:}如:编写的是test.protopackage protobuf;option java_package = "com.sq.protobuf";option java_outer_classname = "FirstProtobuf";message testBuf {required int32 ID = 1;required string Url = 2;}将其放在与刚解压的protoc.exe同级目录中。2.在cmd中,到protoc-2.4.1-win32文件夹下,执行E:protoc-2.4.1-win32> protoc.exe --java_out=./ test.proto则可以找到的一个生成的FirstProtobuf.java文件。3.在MyEclipse中新建一个java project,建立包com.sq.protobuf,然后将刚才生成的FirstProtobuf.java文件放在其下面。此时会报错,因为没有引入jar包,在package视图下,将protobuf-java-2.4.1.jar引入,即可解决问题。

android studio怎么编译proto

方案是:1、在build.gradle中增加dependencies { compile fileTree(dir: "libs", include: ["*.jar"]) compile group:"com.google.protobuf",name:"protobuf-java",version:"2.5.0" //这个是关键的一句话,对于这个version是从你的本地maven存放的目录, 进入到 .m2 epositorycomgoogleprotobufprotobuf-java目录下,看到的那个数字文件夹的名字,就是你的version,

怎么样编写Protobuf的.proto文件

ProtoBuf java 包编译ProtoBuf的官方下载包并不包含jar文件,需要用户自己configure/make….来自行编译。由于Windows上没有编译环境,就用了一个笨一点方法处理了。分别下载:protobuf-2.4.1.zip ProtoBuf的源文件(包含了C++/Java/Python)的源文件protoc-2.4.1-win32.zip 已经编译过的用于Windows平台的protoc命令(该命令用于将.proto文件转化为Java或C++源文件)。分别解析这两个文件,你可以在protoc-2.4.1-win32.zip解压后的文件中找到一个protoc.exe文件,将其copy到protobuf-2.4.1/src目录下,然后进入protobuf-2.4.1/java,执行:mvn install

proto 转json 值类型错误 python

解决方法如下:1,protobuf下载安装。2,新建目录example。3,上面步骤做好之后,下面我们需要用python实现基于protobuf协议将json转化为pbstring,将pbstring转成json。

c语言中PROTO是什么意思

这不是写得很明白吗?#if _HW_ #define PROTO #else #define PROTO extern#endifPROTO是extern的别名

macbook下eclipse使用proto

先确认你的Mac上是否已安装java运行环境。具体步骤如下:1、进入终端,输入java-version,如果返回了java版本号,则说明已安装,否则,会弹出先安装java运行环境的提示。2、访问Oracle官网,浏览到首页的底部菜单,选择JAVA选项下面的DOWNLOADJAVAFORDEVELOPERS。3、点击“JDKDOWNLOAD”按钮。4、选择“AcceptLisenceAgreement”同意协议。5、点击MacOSXx64后面的下载链接。勾选ACCEPTLICENSEAGREEMENT,选择下面MAC开头的下载包。6、下载完成后点击安装包,按提示即可完成安装。7、打开终端,输入:/usr/libexec/java_home-V。8、会出现3个红框内依次为:输入命令,当前Mac已安装jdk目录,Mac默认使用的jdk版本。其中Contents下的Home文件夹,是该JDK的根目录。最后根据进程设置环境变量即可,具体代码可在网上查询到。

ProtoBuf简介

ProtoBuf是一种无关语言,无关平台的序列化结构数据的方法,可用于通信协议、数据存储等 XML:数据较为冗余,需要成对的闭合标签 JSON:使用键值对方式,压缩了一定的数据空间并且具有可读性 ProtoBuf:适合高性能,对响应速度有要求的数据传输场景,ProtoBuf是二进制数据格式,需要解码和编码,数据本身不具有可读性,只能反序列化后才能读到真正的数据。序列化后的数据相比json和xml很小,适合网络传输;序列化和反序列化比json的处理速度更快。 XML、JSON 更注重数据结构化. ProtoBuf更注重数据序列化,关注效率、空间、速度 数据类型分为两大类: 复合数据类型:枚举和message类型 标准数据类型:整型,浮点,字符串 规则的修饰符: required 字段必须出现1次 optional 字段可出现0次或1次 repeated 字段可出现多次(包括0) 标准数据类型: proto与python类型对应 例如:

"proto"是什么品牌中文名是叫什么

思派朗 编辑来自韩国Proto汽车公司,只不过现在Proto已经被翱欧邻(OULLIM)投资集团收购的超级跑车,此车改写了韩国没有超级跑车的历史。

在项目中使用Protobuf协议实现数据传输(二)

上篇已经简单的分析了什么是ProtoBuf协议的优缺点、简单的环境配置、项目中的简单使用和一些编写.Proto文件的注意点,下面我们更加深入一下ProtoBuf的语法及高级使用(非常感谢Carson_Ho大神的博文指导) 作用 :防止不同 .proto 项目间命名 发生冲突 ProtoBuf包的解析过程如下 : 作用 :影响 特定环境下 的处理方式,但不改变整个文件声明的含义 常用Option选项 :(因为使用有限,简单列举常见的) 作用 :真正用于描述 数据结构 在.proto消息模型中主要有 消息对象&字段 组成 :字段 = 字段修饰符 + 字段类型 +字段名 +标识号(主要针对proto2以前版本) 字段 = 字段类型 +字段名 +标识号(主要针对proto3及以后版本) 一个消息对象 可以将 其他消息对象类型 用作字段类型 关于ProtoBuf在项目中的实践的高级用法请关注:下一篇博客:在项目中使用Protobuf协议实现数据传输(三)

现代汽车体系中PROTO 是什么意思

Proto是一家南韩的汽车公司, 地位为运动型汽车.应该不是一家很大的车厂, 主要通过与现代,起亚等大公司合作来生产自己品牌的车. 1997年开始至今没几个车型. 不是很出名的. 2001年proto给韩国总统府,(在职总统的家),定制了一款LIMO, 豪华轿车

proto是意大利哪个地方?

普拉托镇(Prato),位于意大利中北部的托斯卡纳地区。在佛罗伦萨西北13公里的比森齐奥河畔。

PROTO什么意思?

proto-表示“第一, 主要”之义例如:表示“第一, 主要, 原始, 最初”, 如:proto -Arabic

proto是什么阶段

proto打样, 料件及整机模具开发调试阶段 EVT, Engineering Validation Test 是针对工程原型机的验证,对象很可能是一大块开发板,或是很多块开发板;关键是要有足够时间和样品。 通常,如果是新平台,需要花的时间和精力可能更多,会有很多问题要解决,甚至有很多方案要对比;而修改既有产品的话,这个阶段会简单很多,甚至省略。 这一阶段的重点是尽可能多的发现设计问题,以便及早修正;或者说设计可行性的验证。同时检查是否有规格被遗漏。 主要由研发部门来执行。

PROTO什么意思?

proto英 [pru0259u028atu0259]美 ["proto]n. 原型;样机;典型n. (Proto)人名;(意)普罗托

为什么我的MOTOA1200E可以上互联网,就是不能上手机移动梦网呢?

  移动梦网的设置参数没设置好,离移动公司进的话建议拿去让服务员为你设置一下。  一般情况是这样设置的第一步:主彩单->连接->数据通信->数据账户->添加账户->GPRS数据->随便建立一个名称->不用填,直接保存.  第二步:  选择建立的名称->编辑参数->  APN:CMWAP  用户标识:空  密码:空  密码请求:关闭  优选服务:自动  IP地址:空  DNS地址:空  高级设定:  1、身份确认:无  2、数据压缩:关闭  3、标题压缩:关闭  4、服务质量:  (1)、优先:已指定  (2)、延迟:已指定  (3)、可靠性:已指定  (4)、最大速率:已指定  (5)、平均速率:已指定  第三步:  主菜单->连接->WAP选项->WAP->模式->添加模式->随便建立一个名称(如:移动梦网):  连接方式:选择第一步建立的名称  IP地址:010.000.000.172  第四步:  主菜单->连接->WAP选项->WAP模式->移到建立的名称->编辑->高级:  1、更改主页:输入“移动梦网”->HTTP://WAP.MONTERNET.COM  2、第二个账户->选择账户->无  3、用户标识:空  4、密码:空  5、保安:关闭  6、下载图片:启动  有的是上网设置:  功能表→设置→配置设置→个人配置设置→操作→新增→网络→账号名称:不用改→主页:http://wap.monternet.com→用户名和密码要清空→使用首选接入点:取消→接入点设置→代理:已启动→代理地址: 10.0.0.172 →代理端口:80→传输方式:GPRS→传输方式设置→GPRS接入点:cmwap→鉴权类型:普通→用户名和密码清空  彩信设置:  功能表→设置→配置设置→个人配置设置→操作→新增→多媒体信息→账号名称:不用改→服务器地址:http://mmsc.monternet.com→  使用首选接入点:取消→接入点设置→代理:已启动→代理地址: 10.0.0.172 →代理端口:80→传输方式:GPRS→传输方式设置→GPRS接入点:cmwap→鉴权类型:普通→用户名和密码清空  OK打完收工~~~  借用jetsetradio (成都社区)的帖子我补充一点,呵呵,不要怪我哦因为这步很重要的。以上设置设好了以后返回到 “配置设置” 选 “预设配置设 ”选“个人配置” 操作 “设为预先设置”  诺基亚N70/6630/6681/6680的上网设置  开机,进入主菜单  选择“工具”->“设置”  进入后再选择 "连接设置" ,然后是“接入点”->“选项”->“新增接入点”->“使用默认设置”  连接名称-随意写一个  数据承载方式-分组数据  接入点名称-cmwap  用户名-无  提示输入密码-否  密码-无  鉴定-安全  主页-随便  设置完成这些选项后,再按屏幕左下角的选项按键,在弹窗菜单中选择 "高级设置"  网络类型-IPV4  手机IP地址-自动  域名服务器-自动  代理服务器地址-10.0.0.172  代理端口号码-80  设置完成后返回到主菜单选择 "网络" 图标  进入后按 "选项"  在弹窗菜单中选择“设置”  “默认接入点”选择你刚才新建的接入点  显示图像-是  文字换行-开  字体大小-普通  默认编码方式-自动  自动书签-开  屏幕大小-仅选择功能键  设置完成!ok!

电脑出现“a11bootoptionsaretried”是什么意思?

意为:所有启动选项都试过。按F4键与工厂在恢复图像,这时就说明电脑的引导已经损坏。请尝试以下操作:开机过程中按F2键,进入BIOS界面按F9恢复默认值,F10保存退出。开机过程中按F2进入BIOS。- 选择"Boot"菜单→ 选择‘Secure Boot"设置为 Disabled。选择‘OS Mode Selection" 设置为 UEFI and CSM OS。F10键保存退出。笔记本电脑的优点:由于技术特点,笔记本电脑的技术含量,其仿冒的难度和成本是很高的,所以一般没有假冒伪劣的产品,更没有真正的所谓“山寨机”所以具有质量稳定,工作可靠的特点。由于电池的存在使笔记本同台式机相比等于安装了一台长延时的在线式工作的UPS系统,因此可以保证工作中的笔记本电脑,在市电源突然停电时不会突然停机而丢失数据。可以长时间(几天甚至一周)工作在睡眠状态,处于睡眠状态的电脑,可以瞬间启动迅速进入工作状态,避免了难耐冗长的启动过程。这点是台式机所不能实现的。

如何使用 iZotope RX 4 进行降噪,修复爆音和削波失u01dc

 我们在录音的时候总会出现一些不可避免的小瑕疵,例如噪音,爆音,劈啪声,在条件和环境允许的情况下,通常会通过补录或重录的方式当场解决,然而对于录同期声就没这么幸运了,现场的情况错综复杂,时间也很宝贵,一些小的瑕疵通常只能寻求后期手段来补救,庆幸的是,在数字时代,这些小瑕使用iZotope RX4软件很容易进行修复!本文将向大家介绍:如何使用RX4进行降噪,修复爆音和削波。  在《混音全揭秘》视频课程的录制过程中,其中有一个话筒专门用来录对白,同样也遇到了这些问题,笔者节选了一段对白声音音频进行讲解,演示文件可以分别下载(修复前RX_LEAM.wav和修复后RX_LEAM_FIX.wav),大家可以对比修复前和修复后的声音变化,也自己动手尝试修复。  先听一听演示文件,分析哪些地方需要进行修复的:第一,这段对白有较明显的底噪,会影响播出效果。第二,录音时话放增益设置的不合理,导致多处有电平过载所产生的失真,30秒,34秒的地方很明显,第三,14秒的地方有一个爆音,我们逐一来解决。  一,降低背景噪音  背景噪音直接影响声音的清晰度,如果条件允许,尽可能在前期减少噪音而不是通过后期来补救,对于歌曲和器乐演奏来说,降噪不是必须的步骤,轻微的设备底噪完全不影响混音。对于这种较规律的背景噪音,可以用RX4中的“Denoise“插件来处理,”Denoise“是一个非常棒的采样降噪效果器。  先来了解一下“噪音样本”的概念,采样降噪效果器在工作前首先需要让插件学习一小段噪音,作用是让插件理解我们要降低的环境噪音有有什么特点,插件根据这一段噪音样本去识别我们需要处理的声音,而我们在选择噪音样本的的时候,尽可能选择”干净”和”有代表性“的噪音以获得理想的效果,一般1-2秒就够了,也可以在录音时额外录制一小段环境噪音作为噪音样本,  修复步骤:  1,打开”Denoise”效果器界面  2,用”选择工具“从素材中选择一小段环境噪音  3,点击”Leam“按钮让插件学习噪音样本  4,调整”Threshold“(阈值)和”Reduction“(减少)参数  ”Threshold“参数用来控制噪音处理的阈值,”Reduction“参数用来控制将噪音衰减多少,”Artifact control"参数用则来调整人工噪音的比例,通过“Preview”按钮来试听和调整参数,当参数调整合适后,点击“Process”按年即可完成处理。  “Denoise”效果器在降噪过程中还加入了一定的人工噪音算法,使得经过降噪处理的声音能够听起来更自然,我们的目的只是降低噪音,而不是把噪音完全拿掉,至于衰减多少,需要你自己来取舍,原则是保证噪音被有效降低,并且不会出现明显的失真。  值得一提的是:RX4中的选择工具是一个组合概念,除了时间选择(选一竖条)还可以选择一部分频率(选一小块),甚至还可以自己用鼠标画一个区域,一般情况用常规的时间选择工具选择一竖条噪音样本就可以了,其他几种方式可以自己尝试。  二, 修复削波失真  削波失真通常由于电平过载所产生,所以在录音前,提前规划输入电平调整好话放的增益,留出一定余量很有必要,加一个硬件的压缩器都能够避免削波的产生。如果已经出现一些轻微的削波失真,我们仍然可以通过RX4套装中的”Decilp“插件来修复。  通过观察波形不难发现,演示文件中有多处超过0dB的地方,例如30秒和34秒的地方,声音已经明显出现失真,我们尝试用”Decilp“插件来对其进行修复。  修复步骤:  1,演示文件有多处削波,我们可以选中全部片段  2,打开”Decilp”效果器界面  3,点击“Preview”预览削波所产生的失真是否已经被修复  4,点击“Process”进行处理  ”Threshold“参数用于识别需要修复过载的电平大小,”Makeup Gain“参数的作用是限制修复后的最大电平,类似于限制器。经过修复以后,因为电平过载而产生的削波失真已经被修复了,现在听起来很自然,接下来我们来修复14秒的地方的一个劈啪声。  三, 修复噼啪声  劈啪声产生的原因有很多,声卡和系统卡顿会引起爆音,交流电供电不稳也会引起爆音,出现劈啪声的原因有很多,有了RX4以后这些没有什么大不了的,使用RX4套装中的“ Spectral Repair”效果器,很容易对劈啪声进行修复。需要注意的是:如果你通常使用插件方式来使用RX4,我更建议选择一小块需要处理的地方,使用破坏性编辑的方式进行处理,因为有爆音的地方很固定,这样既不占用资源,也不会插件算法的缘故引发新问题。  修复步骤:  1,选中需要修复劈啪声小片段  2,打开”Spectral Repair”效果器界面  3,先不调整任何参数,点击“Preview”听爆音是否消失  4,如果已经解决,点击“Process”进行处理  5,如果爆音未被修复,更改处理模式再次预览,爆音消失后点击处理  爆音产生原因不同,修复的算法也不一样,使用默认的参数成功将劈啪声完美修复,Spectral Repair插件中的其他几种处理模式就不一一介绍了,在处理实际问题的时候来尝试。用我们的耳朵去判断,以成功修复爆音并且不产生新问题为目标。  至此,演示文件中的这三个问题已被成功修复,对比修复前和修复后的两个演示文件,就会知道RX4到底有多神了,需要提醒大家的是:能在录音前和录音过程中解决的问题尽量在前期解决,后期来修复只是补救措施,如果录了一条全是劈啪声和噪音的素材,就别浪费时间去修复啦,直接扔进回收站吧!

ie8中使用Array.prototype.splice.call对伪数组进行删除时为什么不能删除?

ufefffunctionbox(arr){this.arr=arr;}box.prototype.aa=function(){this.ori=[].concat(this.arr);for(vari=0;i<this.arr.length;i++){for(varj=i+1;j<this.arr.length;j++){if(this.arr[i]==this.arr[j]){this.arr.splice(j,1);}}}alert("原来的是:"+this.ori+" "+"去重后:"+this.arr);}varnum=newbox([1,5,10,8,20,7,4,2,4,5,3,1,19,20]);num.aa();

ie8中使用Array.prototype.splice.call对伪数组进行删除时为什么不能删除?

因为数组应该是for(let i=0;i<list.length;i++){console.log(list.item(i))才能删除。解决步骤如下:1、首先第一步就是要进行getElementsByTagName 得到的是 HTMLCollections类注意的是有一个ID为"test"的元素,可以直接取得。2、接着就是这时候进行querySelector 得到的是 NodeList注意的是document.querySelectorAll("div").forEach((a,b,c)=>{console.log("第一个参数:" + a + "值");console.log。3、然后就是通过控制台观察发现,两者都具备iterator接口,都可以支持for ... of语相比来讲,援引Arguments来。4、最后一步就是进行ie8中使用Array.prototype.splice.call对伪数组的删除,这时候就可以删除成功了会有提示的,如下图所示。

photoshop的lap是什么

你说的是颜色模式 LAB 吧?

photoshop 图层改multiply

图层-左上方选项-叠加图层-不透明度-75

在photoshop里如何选模式为Multiply或screen

在 图层面板 顶部,那个默认值为100的框中下拉

photoshop混合模式中的Multiply是什么意义?

PS还用英文的??牛啊,你英文应该不错吧,好好学吧,将来再学3D

photoshopCS2 运行注册机keygen.exe怎么操作

打开keygen。exe并把里面的选项选到photoshopcs2在吧你的激活号输进去点击那个G什么什么的就出来你需要的号了,注意,是选第二个,我说得有点不太清楚。反正就是那样。你试试就知道了

我在激活photoshop cs9.0时,有一个步骤要“运行注册机keygen.exe"是什么意思啊?怎么运行啊?

在安装文件目录有这么一个文件,你打开后按提示注册!

Photoshop CS2注册机Keygen.exe怎么运行

双击运行。安装PS CS2的时候在要求输入序列号的地方输入Keygen.exe生成的序列号,方法:在Install Application的下拉列表中选择"Photoshop CS2 9.0",点击"Generate"按钮,即生成序列号,将序列号复制到PS CS2安装程序的序列号文本框中。在快要完成安装时,PS CS2会要求你激活。这个时候选择电话激活。然后在Keygen.exe的Activation的下拉列表中选择"Photoshop CS2 9.0",点击"Generate"按钮,生成激活码,将其复制到安装程序的激活码文本框内。注意序列号和激活码是有关联的,在运行的过程中不要关闭Keygen.exe;如果已生成序列号,就不要在"Install Application"中再次生成按钮。如果你输入的序列号不能和激活码相对应,那么激活必然失败。不知道你能看懂不?安装是一个很简单的过程,这样形成了语言看起来反而复杂。其实最开始我也不知道怎么使用这个Keygen,也是乱试试出来的,当然前提是你必须认识英文。如果还有不懂的地方,可以随时问我。

Photoshop CS2 9.0注册机Keygen.exe

1661-8566-2402-7418-3021
 1 2 3 4 5 6  下一页  尾页