一个53位的二进制数怎样生成crccrc 16校验码生成java

MySQL建表规范与常见问题 - 推酷
MySQL建表规范与常见问题
一、 表设计
库名、表名、字段名必须使用小写字母,“_”分割。
库名、表名、字段名必须不超过12个字符。
库名、表名、字段名见名知意,建议使用名词而不是动词。
建议使用InnoDB存储引擎。
存储精确浮点数必须使用DECIMAL替代FLOAT和DOUBLE。
建议使用UNSIGNED存储非负数值。
建议使用INT UNSIGNED存储IPV4。
整形定义中不添加长度,比如使用INT,而不是INT(4)。
使用短数据类型,比如取值范围为0-80时,使用TINYINT UNSIGNED。
不建议使用ENUM类型,使用TINYINT来代替。
尽可能不使用TEXT、BLOB类型。
VARCHAR(N),N表示的是字符数不是字节数,比如VARCHAR(255),可以最大可存储255个汉字,需要根据实际的宽度来选择N。
VARCHAR(N),N尽可能小,因为MySQL一个表中所有的VARCHAR字段最大长度是65535个字节,进行排序和创建临时表一类的内存操作时,会使用N的长度申请内存。
表字符集选择UTF8。
使用VARBINARY存储变长字符串。
存储年使用YEAR类型。
存储日期使用DATE类型。
存储时间(精确到秒)建议使用TIMESTAMP类型,因为TIMESTAMP使用4字节,DATETIME使用8个字节。
建议字段定义为NOT NULL。
将过大字段拆分到其他表中。
在数据库中使用VARBINARY、BLOB存储图片、文件等。
表结构变更需要通知DBA审核。
非唯一索引必须按照“idx_字段名称_字段名称[_字段名]”进行命名。
唯一索引必须按照“uniq_字段名称_字段名称[_字段名]”进行命名。
索引名称必须使用小写。
索引中的字段数
不超过5个。
单张表的索引数量控制在5个以内。
唯一键由3个以下字段组成,并且字段都是整形时,使用唯一键作为主键。
没有唯一键或者唯一键不符合5中的条件时,使用自增(或者通过发号器获取)id作为主键。
唯一键不和主键重复。
索引字段的顺序需要考虑字段值去重之后的个数,个数多的放在前面。
ORDER BY,GROUP BY,DISTINCT的字段需要添加在索引的后面。
使用EXPLAIN判断SQL语句是否合理使用索引,尽量避免extra列出现:Using File Sort,UsingTemporary。
UPDATE、DELETE语句需要根据WHERE条件添加索引。
不建议使用%前缀模糊查询,例如LIKE “%weibo”。
对长度过长的VARCHAR字段建立索引时,添加crc32或者MD5 Hash字段,对Hash字段建立索引。
合理创建联合索引(避免冗余),(a,b,c) 相当于 (a) 、(a,b) 、(a,b,c)。
合理利用覆盖索引。
SQL变更需要确认索引是否需要变更并通知DBA。
三、 SQL语句
使用prepared statement,可以提供性能并且避免SQL注入。
SQL语句中IN包含的值不应过多。
UPDATE、DELETE语句不使用LIMIT。
WHERE条件中必须使用合适的类型,避免MySQL进行隐式类型转化。
SELECT语句只获取需要的字段。
SELECT、INSERT语句必须显式的指明字段名称,不使用SELECT *,不使用INSERTINTO table()。
使 用SELECT column_name1, column_name2 FROM table WHERE[condition]而不是SELECT column_name1 FROM table WHERE[condition]和SELECT column_name2 FROM table WHERE [condition]。
WHERE条件中的非等值条件(IN、BETWEEN、&、&=、&、&=)会导致后面的条件使用不了索引。
避免在SQL语句进行数学运算或者函数运算,容易将业务逻辑和DB耦合在一起。
INSERT语句使用batch提交(INSERT INTO tableVALUES(),(),()……),values的个数不应过多。
避免使用存储过程、触发器、函数等,容易将业务逻辑和DB耦合在一起,并且MySQL的存储过程、触发器、函数中存在一定的bug。
避免使用JOIN。
使用合理的SQL语句减少与数据库的交互次数。
不使用ORDER BY RAND(),使用其他方法替换。
建议使用合理的分页方式以提高分页的效率。
统计表中记录数时使用COUNT(*),而不是COUNT(primary_key)和COUNT(1)。
在从库上执行后台管理和统计类型功能的QUERY。
每张表数据量建议控制在5000w以下。
可以结合使用hash、range、lookup table进行散表。
散表如果使用md5(或者类似的hash算法)进行散表,表名后缀使用16进制,比如user_ff。
使用CRC32求余(或者类似的算术算法)进行散表,表名后缀使用数字,数字必须从0开始并等宽,比如散100张表,后缀从00-99。
使用时间散表,表名后缀
使用特定格式,比如按日散表user_、按月散表user_201102。
批量导入、导出数据需要DBA进行审查,并在执行过程中观察服务。
批量更新数据,如update,delete 操作,需要DBA进行审查,并在执行过程中观察服务。
产品出现非数据库平台运维导致的问题和故障时,如前端被抓站,请及时通知DBA,便于维护服务稳定。
业务部门程序出现bug等影响数据库服务的问题,请及时通知DBA,便于维护服务稳定。
业务部门推广活动,请提前通知DBA进行服务和访问评估。
如果出现业务部门人为误操作导致数据丢失,需要恢复数据,请在第一时间通知DBA,并提供准确时间,误操作语句等重要线索。
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
1-1.库名、表名、字段名必须使用小写字母,“_”分割。
有配置参数lower_case_table_names,不可动态更改,linux系统默认为0,即库表名以实际情况存储,大小写敏感。如果是1,以小写存储,大小写不敏感。如果是2,以实际情况存储,但以小写比较。
b) 如果大小写混合用,可能存在abc,Abc,ABC等多个表共存,容易导致混乱。
c) 字段名显示区分大小写,但实际使用不区分,即不可以建立两个名字一样但大小写不一样的字段。
d) 为了统一规范, 库名、表名、字段名使用小写字母。
1-2.库名、表名、字段名必须不超过12个字符。
库名、表名、字段名支持最多64个字符,但为了统一规范、易于辨识以及减少传输量,必须不超过12字符。
1-3.库名、表名、字段名见名知意,建议使用名词而不是动词。
a) 用户评论可用表名usercomment或者comment。
b) 库表是一种客观存在的事物,一种对象,所以建议使用名词。
1-4.建议使用InnoDB存储引擎。
a) 5.5以后的默认引擘,支持事务,行级锁,更好的恢复性,高并发下性能更好,对多核,大内存,ssd等硬件支持更好。
b) 具体比较可见附件的官方白皮书。
1-5.存储精确浮点数必须使用DECIMAL替代FLOAT和DOUBLE。
a) mysql中的数值类型(不包括整型):
&IEEE754浮点数:float&
&(单精度) , double&
(双精度)
定点数: decimal或 numeric
单精度浮点数的有效数字二进制是24位,按十进制来说,是8位;双精度浮点数的有效数字二进制是53位,按十进制来说,是16 位
一个实数的有效数字超过8位,用单精度浮点数来表示的话,就会产生误差!同样,如果一个实数的有效数字超过16位,用双精度浮点数来表示,也会产生误差
b)IEEE754标准的计算机浮点数,在内部是用二进制表示的,但在将一个十进制数转换为二进制浮点数时,也会造成误差,原因是不是所有的数都能转换成有限长度的二进制数。
即一个二进制可以准确转换成十进制,但一个带小数的十进制不一定能够准确地用二进制来表示。
create table t(value float(10,2));
insert into t values(),();
+-----------+
+-----------+
+-----------+
1-6.建议使用UNSIGNED存储非负数值。
同样的字节数,存储的数值范围更大。如tinyint 有符号为 -128-127,无符号为0-255
7. 如何使用INT UNSIGNED存储ip?
使用INTUNSIGNED而不是char(15)来存储ipv4地址,通过MySQL函数inet_ntoa和inet_aton来进行转化。Ipv6地址目前没有转化函数,需要使用DECIMAL或者两个bigINT来存储。例如:
SELECT INET_ATON('209.207.224.40');
SELECT INET_NTOA();
209.207.224.40
1-8. INT[M],M值代表什么含义?
注意数值类型括号后面的数字只是表示宽度而跟存储范围没有关系,比如INT(3)默认显示3位,空格补齐,超出时正常显示,
、java客户端等不具备这个功能。
1-10.不建议使用ENUM、SET类型,使用TINYINT来代替。
a)ENUM,有三个问题:添加新的值要做DDL,默认值问题(将一个非法值插入ENUM(也就是说,允许的值列之外的字符串),将插入空字符串以作为特殊错误值),索引值问题(插入数字实际是插入索引对应的值)
create table t(sex enum('0','1'));
insert into t values(1);
insert into t values('3');
2 rows in set (0.00 sec)
1-11.尽可能不使用TEXT、BLOB类型。
a) 索引排序问题,只能使用max_sort_length的长度或者手工指定ORDER BY SUBSTRING(column,length)的长度来排序
b) Memory引擘不支持text,blog类型,会在磁盘上生成临时表
c) 可能浪费更多的空间
d) 可能无法使用adaptive hash index
e) 导致使用where没有索引的语句变慢
1-13. VARCHAR中会产生额外存储吗?
VARCHAR(M),如果M&256时会使用一个字节来存储长度,如果M&=256则使用两个字节来存储长度。
1-14.表字符集选择UTF8。
a) 使用utf8字符集,如果是汉字,占3个字节,但ASCII码字符还是1个字节。
b) 统一,不会有转换产生乱码风险
c) 其他地区的用户(美国、印度、台湾)无需安装简体中文支持,就能正常看您的文字,并且不会出现乱码
d)ISO-8859-1编码(latin1)使用了单字节内的所有空间,在支持ISO-8859-1的系统中传输和存储其他任何编码的字节流都不会被抛弃。即把其他任何编码的字节流当作ISO-8859-1编码看待都没有问题,保存的是原封不动的字节流。
1-15.使用VARBINARY存储变长字符串。
二进制字节流,不存在编码问题
1-18. 为什么建议使用TIMESTAMP来存储时间而不是DATETIME?
DATETIME和TIMESTAMP都是精确到秒,优先选择TIMESTAMP,因为TIMESTAMP只有4个字节,而DATETIME8个字节。同时TIMESTAMP具有自动赋值以及自动更新的特性。
如何使用TIMESTAMP的自动赋值属性?
&将当前时间作为ts的默认值:ts TIMESTAMP DEFAULTCURRENT_TIMESTAMP。
&当行更新时,更新ts的值:ts TIMESTAMP DEFAULT 0 ONUPDATE CURRENT_TIMESTAMP。
&可以将1和2结合起来:ts TIMESTAMP DEFAULTCURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP。
1-19.建议字段定义为NOT NULL。
a)如果null字段被索引,需要额外的1字节
b)使索引,索引统计,值的比较变得更复杂
c)可用0,''代替
d)如果是索引字段,一定要定义为not null
1-21.禁止在数据库中使用VARBINARY、BLOB存储图片、文件等。
采用分布式文件系统更高效
2. 为什么MySQL的性能依赖于索引?
MySQL的查询速度依赖良好的索引设计,因此索引对于高性能至关重要。合理的索引会加快查询速度(包括UPDATE和DELETE的速度,MySQL会将包含该行的page加载到内存中,然后进行UPDATE或者DELETE操作),不合理的索引会降低速度。
MySQL索引查找类似于新华字典的拼音和部首查找,当拼音和部首索引不存在时,只能通过一页一页的翻页来查找。当MySQL查询不能使用索引时,MySQL会进行全表扫描,会消耗大量的IO。
2-5. 为什么一张表中不能存在过多的索引?
InnoDB的secondaryindex使用b+tree来存储,因此在UPDATE、DELETE、INSERT的时候需要对b+tree进行调整,过多的索引会减慢更新的速度。
2-11. EXPLAIN语句
EXPLAIN语句(在MySQL客户端中执行)可以获得MySQL如何执行SELECT语句的信息。通过对SELECT语句执行EXPLAIN,可以知晓MySQL执行该SELECT语句时是否使用了索引、全表扫描、临时表、排序等信息。尽量避免MySQL进行全表扫描、使用临时表、排序等。详见
2-13.不建议使用%前缀模糊查询,例如LIKE “%weibo”。
会导致全表扫描
2-14. 如何对长度大于50的VARCHAR字段建立索引?
下面的表增加一列url_crc32,然后对url_crc32建立索引,减少索引字段的长度,提高效率。
CREATE TABLE url(
url VARCHAR(255) NOT NULL DEFAULT 0,
&url_crc32INT UNSIGNED NOT NULL DEFAULT 0,
index idx_url(url_crc32)
2-16. 什么是覆盖索引?
InnoDB 存储引擎中,secondaryindex(非主键索引)中没有直接存储行地址,存储主键值。如果用户需要查询secondaryindex中所不包含的数据列时,需要先通过secondaryindex查找到主键值,然后再通过主键查询到其他数据列,因此需要查询两次。
覆盖索引的概念就是查询可以通过在一个索引中完成,覆盖索引效率会比较高,主键查询是天然的覆盖索引。
合理的创建索引以及合理的使用查询语句,当使用到覆盖索引时可以获得性能提升。
比如SELECT email,uid FROM user_email WHEREuid=xx,如果uid不是主键,适当时候可以将索引添加为index(uid,email),以获得性能提升。
3-3.UPDATE、DELETE语句不使用LIMIT。
a) 可能导致主从数据不一致
b) 会记录到错误日志,导致日志占用大量空间
3-4. 为什么需要避免MySQL进行隐式类型转化?
因为MySQL进行隐式类型转化之后,可能会将索引字段类型转化成=号右边值的类型,导致使用不到索引,原因和避免在索引字段中使用函数是类似的。
3-6. 为什么不建议使用SELECT *?
增加很多不必要的消耗(cpu、io、内存、网络带宽);增加了使用覆盖索引的可能性;当表结构发生改变时,前段也需要更新。
3-13. 如何减少与数据库的交互次数?
使用下面的语句来减少和db的交互次数:
INSERT ... ON DUPLICATE KEY UPDATE
INSERT IGNORE
INSERT INTO values(),()如何结合使用多个纬度进行散表散库?
例如微博message,先按照crc32(message_id)将message散到16个库中,然后针对每个库中的表,一天生成一张新表。
3-14. 为什么不能使用ORDER BY rand()?
因为ORDER BYrand()会将数据从磁盘中读取,进行排序,会消耗大量的IO和CPU,可以在程序中获取一个rand值,然后通过在从数据库中获取对应的值。
3-15. MySQL中如何进行分页?
假如有类似下面分页语句:
SELECT * FROM table ORDER BY TIME DESC LIMIT 10000,10;
这种分页方式会导致大量的io,因为MySQL使用的是提前读取策略。
推荐分页方式:
SELECT * FROM table WHERE TIME
SELECT * FROM table inner JOIN(SELECT id FROM table ORDER BYTIME LIMIT 10000,10) as t USING(id)
3-17.为什么避免使用复杂的SQL?
拒绝使用复杂的SQL,将大的SQL拆分成多条简单SQL分步执行。原因:简单的SQL容易使用到MySQL的querycache;减少锁表时间特别是MyISAM;可以使用多核cpu。
2. InnoDB存储引擎为什么避免使用COUNT(*)?
InnoDB表避免使用COUNT(*)操作,计数统计实时要求较强可以使用memcache或者redis,非实时统计可以使用单独统计表,定时更新。
已发表评论数()
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见
正文不准确
标题不准确
排版有问题
主题不准确
没有分页内容
图片无法显示
视频无法显示
与原文不一致你的位置:
> 不使用附件形式来发送二进制数
发表于( 00:00) 本文标签:
浏览量:493次
&&&&值班编辑QQ:
带附件的SOAP规范定义了怎样随SOAP消息发送二进制附件。但是某些时候您可能不想使用附件来发送二进制数据。例如,微软的 .Net Web 服务引擎不支持带附件的 SOAP 消息(Sw/A),所以如果您想协同使用 .Net,您必须使用附件以外的方法来发送二进制数据。学习一种新的方法来更改现存带附件的 Web 服务来发送二进制数据到另外一个 Web 服务,而且该 Web 服务不支持附件。
除了使用附件的 SOAP 消息(Sw/A)外,还有很多其他方法来交互二进制数据。我们简单地提到了几个复杂的方法,然后详细地介绍一个最简单的方法。
DIME 解决方案
如果您的 Web 服务实现支持 DIME,那么您可以编写一个封装器 WSDL,它的绑定可以处理 DIME 协议,而不是 Sw/A 协议。不过,使用这个方法有两个比较大的问题:
在 W3C 的 DIME 注释在 2002 年底终止了,所以现在已没有任何关于 DIME 的官方规范了。而没有一个官方规范,很可能除了微软以外,其他人都不在支持这个协议。
现在没有一个 DIME 的 WSDL 官方绑定。而没有一个官方绑定,很可能一个给定的绑定不会被所有提供商所支持,而且这样的话,DIME 绑定将不能协同操作。
MTOM 解决方案
SOAP 消息传输优化机制(SOAP Message Transmission Optimization Mechanism,MTOM)是另外一种二进制数据附件协议,而且它很有希望被所有的 Web 服务提供商所支持。但是到编写这篇文章为止,MTOM 规范还没有制订完成(参看 参考资料),所以在有协同操作能力的 MTOM 实现开始在市场出现时,可能需要一年,甚至两年。
非附件解决方案
交互二进制数据最简单的方法就是在 XML 中使用字节流,而且作为 xsd:hexBinary 类型或 xsd:base64Binary 类型。简单说,就是您把附件信息转换为非附件形式的字节数据。使用附件的方式是把附件的原始数据放在消息的附件部分,而且与 SOAP 消息相分离,与之不同的是,使用非附件的方式就是把附件的原始数据直接放在 SOAP 消息中。使用这种方法的缺点就是,因为原始数据放在了 SOAP 消息中,为此 XML 解析器 必须扫描这些数据,即使它从来不会被使用到(例如,在一个 SOAP 处理中间体,类似于一个路由器)。所以它不是一个非常有效的解决方案,但它确实是一个最简单的方法。
一个详细的示例
假设您有一个遗留的 Web 服务,它有如 清单 1所示的接口。
清单 1. 附件的遗留 API。
package com.ibm.developerWorks.  public interface ImageBag extends java.rmi.Remote {   public void sendImage(java.awt.Image i);   public java.awt.Image getImage();  }
这个接口包含 java.awt.Image s。假设它们是 jpeg 图像。根据 JAX-RPC 协议规范,这些图像将映射到 image/jpeg 类型的附件。但是您不想使用附件,所以您下一步要做的就是创建一个封装应用程序,通过它来委托调用原始的应用程序。这个封装器程序的 API(参看 清单 2)包含了二进制数组,而不是图像。这个封装器程序的 WSDL 包含了 xsd:hexBinary 数据类型。(您可以从这个企业应用程序的 EAR 文件中同时找到原始 Web 服务和封装器 Web 服务的 WSDL 文件,对于这个 EAR 文件,您可以点击这篇文章的顶部或底部的 源代码图标来下载一个 ZIP 文件,然后从这个 Zip 文件中摘取出 EAR 文件。 )
清单 2. 封装器 API
package com.ibm.developerWorks.  public interface ImageBagWithNoAttachments extends java.rmi.Remote {   public void sendImage(byte[] i);   public byte[] getImage();  }
到现在为止,我们感觉很好。但现在您要理解更困难的部分:封装器的实际实现。在委托方法调用到真正的服务之前,封装器实现必须在 byte[] 和 java.awt.Image 之间转换。请参看 清单 3 来获得封装器 API 的完整实现。这是一个可能的 J2SE 1.4 解决方案。这个转换相对有点复杂,而且这篇文章的主要目的也不是来详细介绍怎样在 byte[] 和 java.awt.Image 之间进行转换,我们把这断代码放在这里仅仅是作为您的参考信息(FYI)。
清单 3. 封装器 API 的实现
package com.ibm.developerWorks.    import java.awt.G  import java.awt.I  import java.awt.MediaT  import java.awt.image.BufferedI  import java.io.ByteArrayInputS  import java.io.ByteArrayOutputS  import java.util.I  import javax.imageio.IIOI  import javax.imageio.ImageIO;  import javax.imageio.ImageW  import javax.imageio.stream.ImageOutputS  public class ImageBagWithNoAttachmentsSoapBindingImpl   extends Component implements ImageBagWithNoAttachments{   private ImageBag imageBag = new ImageBagSoapBindingImpl();   public void sendImage(byte[] i) {   try {   ByteArrayInputStream bais = new ByteArrayInputStream(i);   ImageIO.setUseCache(false);   imageBag.sendImage(ImageIO.read(bais));   }   catch (Exception e) {   e.printStackTrace();   }   }   public byte[] getImage() {   try {   Image image = imageBag.getImage();   Iterator iter = ImageIO.getImageWritersByMIMEType  (&image/jpeg&);   ImageWriter writer = iter.hasNext() ? (ImageWriter)   iter.next() :   ByteArrayOutputStream baos = new ByteArrayOutputStream  ();   ImageOutputStream ios = ImageIO.createImageOutputStream  (baos);   writer.setOutput(ios);   BufferedImage rendImage = if (image instanceof BufferedImage) { rendImage = (BufferedImage) } else { MediaTracker tracker = new MediaTracker(this); tracker.addImage(image, 0); tracker.waitForAll(); rendImage = new BufferedImage(image.getWidth(null), image.getHeight(null), 1); Graphics g = rendImage.createGraphics(); g.drawImage(image, 0, 0, null); } writer.write(new IIOImage(rendImage, null, null)); writer.dispose(); return baos.toByteArray();   }   catch (Exception e) {   e.printStackTrace();     }   }  }
关于使用 xsd:hexBinary、CDATA、以及 .NET 时的注意事项
当您不想让 XML 解析器来解析某些二进制数据时,经常可以使用 CDATA 来封装这些二进制数据,所以有些系统会使用 CDATA 来封装 xsd:hexBinary 数据。而 .NET 不能很好地处理 CDATA 数据块。而 5.1.1 版本之前的 WebSphere Web 服务,却经常会把大的 hexBinary 数据(大于 2K)封装到一个 CDATA 数据块中, 所以,即使使用这里提供的方法,那些早期的 WebSphere Web 服务也不能像这篇文章所描述的技巧那样跟 .Net 进行协同工作,除非您要传输的图像非常的小,即小于 2K。  客户端的情况非常类似于服务器端的情况。您想在 byte[] 和 java.awt.Image 之间进行转换。所有客户端类似于服务器端的代码。 (请查看随这篇文章带的 Zip 文件(单击文章顶部或底部的 源代码图标)来获得实际的客户端代码。)
其他 JAX-RPC 支持的所有附件类型都会映射到相应的 Java 类型,而且您可以把它转换为 byte[] 数据(通常是一个字节流),或者转换回来。所以每一个 Java 类型的实现都将不同于这个实例,不过基本思想都相同。
一个客户端样例
既然把一个二进制附件转换为一个嵌入的二进制数据的主要原因是,.Net 不支持带附件的 SOAP 消息(Sw/A),为此我们为这个服务选择给您一个 C# 客户端。在这种情况下,我们基于 .NET Framework SDK version 1.1 构造一个客户端。
正如上面提到的服务实现,我们转换 java.awt.Image 对象为一个 byte[] 数组。在这种情况下,我们相反把 byte[] 转换为 System.Drawing.Image 对象。正如在 Java 中的情况,我们有许多方法来进行转换,这仅仅是一个样例。
在 清单 4 中 C# 客户端代码从文件系统装载一个图像,然后通过 sendImage(byte[] i) 操作把它发送给服务器。一旦发送出去,客户端使用 getImage() 操作获得相同的图像,并且使用不同的名称把它保存到文件系统。
清单 4. C# 客户端实现
using S  using System.D  using System.IO;  using System.T  using System.Web.S  namespace ImageClient  {   class ImageClient   {   [STAThread] static void Main(string[] args) { if (args.Length & 4) { Console.WriteLine(&Insufficient argument list:    & + & &); } else { string host = args[0]; string port = args[1]; string sendImageName = args[2]; string newImageName = args[3];
ImageBagWithNoAttachmentsService service =
new ImageBagWithNoAttachmentsService(); service.Url = &http://& + host + &:& + port +
  &/AttachmentWar/services/ImageBagWithNoAttachments&; // Create a cookie container so that the session will be   saved
// and we can retreive the image. service.CookieContainer = new   System.Net.CookieContainer(); ImageClient client = new ImageClient(); // Turn the image into a byte[] and send it.
Console.WriteLine(&Sending data to the server.&); service.sendImage(client.createByteArray  (sendImageName)); Console.WriteLine(&&); // Get the byte[] from the service and turn it into an   image. Console.WriteLine(&Retreiving image data from the   server.&); client.saveAsImage(service.getImage(), newImageName); } } public byte[] createByteArray(string imageName)
{ FileInfo fileInfo = new FileInfo(imageName); FileStream fileStream = fileInfo.OpenRead(); byte[] byteArray = new byte[fileInfo.Length]; int bytesRead = fileStream.Read(byteArray, 0, byteArray.Length); Console.WriteLine(&{0} bytes have been read from {1}&,
bytesRead.ToString(), imageName); return byteA } public void saveAsImage(byte[] bytes, string imageName)
{ MemoryStream memStream = new MemoryStream(bytes); System.Drawing.Image image =
System.Drawing.Image.FromStream(memStream); image.Save(imageName); Console.WriteLine(&{0} was created successfully.&,   imageName);   }   }  }   注释:在 清单 4 中的 ImageBagWithNoAttachmentsService 对象代表了 .Net 客户端代理。这个对象是使用 wsdl.exe 工具创建的,wsdl.exe 包含在 .Net ramework SDK 1.1 中。下面的 参考资料部分包含了更多关于怎样生成这个代理的信息。
除了使用带附件的 SOAP(Sw/A)以外,您还有许多方法可以用来发送二进制数据。在这篇文章中,我们介绍了最简单的一种方法技巧:使用 xsd:hexBinary 来插入二进制数据到 SOAP 消息中。我们使用 xsd:hexBinary 封装了一个服务,在这个服务中我们把 java.awt.Image 转换为了字节数据放到 SOAP 消息中。
Nicholas Gallardo 是 IBM 公司的软件工程师,现在参与开发 IBM WebSphere Web 服务引擎,而且主要针对引擎的实用性和协同性。Nicholas 在 Austin 和 Texas 开始开发了两个不同的技术后于 2001 年加入 IBM。加入 IBM 时的工作主要包括 WebSphere JNDI 实现,而且开始也在 Tivoli 部门工作过。  Russell Butek 是 IBM Web 服务咨询师,而且也是 IBM WebSphere Web 服务引擎的一个开发人员。他也是 JAX-RPC Java Specification Request (JSR) 专家组的 IBM 代表。他参与了 Apache 的 AXIS SOAP 引擎的实现,并推动了 AXIS 1.0 来遵守 JAX-RPC 1.0 规范。之前,他也是 IBM CORBA ORB 的一个开发人员,而且作为多个 OMG 工作组的 IBM 代表,包括可移植拦截器任务组(而且是该组的组长)、OMG 核心工作组、以及协同操作工作组。
REST vs. SOAP:如何挑选最好的Web服务
用WebSphere DataPower SOA Appliances重写SOAPAction报头
“僵尸”SOAP会阻碍企业发展吗?
SOAP应用模式:处理与性能
如何在SOAP应用程序中使用WSDL?
特别报道:2010年SOA和Web服务建议集锦
REST vs. SOAP REST暂时安全
Web服务的错误报告机制:错误消息处理器和SOAP服务
任意的力量 戴尔Any Cloud任意的力量 戴尔Any Cloud
论SLA制定的重要原则论SLA制定的重要原则
企业云计算平台系列之Rackspace
作为一家托管云计算服务供应商的Rackspace在过去的一年中一直稳步地拓展着它的云计算服务疆域,其中尤其关注大数据和混合云计算。
OpenStack私有云满足高IO需求
OpenStack互操作驾到:开源云平台选择更自由
超级有用!AWS开发者专用OpenStack小抄
企业级OpenStack道路何去何从?
前不久,OpenStack项目创始公司之一Nebula宣布倒闭。Nebula公司自2011年成立以来一直致力于把OpenStack的好处带给企业。它为何又无法依着OpenStack继续坚持下去呢?
Rackspace:面向云计算的跨界尝鲜之路
这些OpenStack支撑资源或许你会用到
私有云盒惠普Helion Rack
甲骨文全球大会2014旧金山云时代中国特别报道甲骨文全球大会2014旧金山云时代中国特别报道
《2013数据库工程师薪酬调查报告》专题《2013数据库工程师薪酬调查报告》专题
开源数据库Sharding技术
Sharding不是一个某个特定数据库软件附属的功能,而是在具体技术细节之上的抽象处理,其主要目的是为突破单节点数据库服务器的I/O能力限制,解决数据库扩展性问题。
在UNIX 和Linux平台上部署IBM DB2 产品(五)
在UNIX 和Linux平台上部署IBM DB2 产品(四)
在UNIX 和Linux平台上部署IBM DB2 产品(三)
在UNIX 和Linux平台上部署IBM DB2 产品(二)
本文讲述了如何跨多台机器在UNIX和Linux平台上快速、轻松和一致地部署 DB2 产品。本说明书可用于安装客户机、服务器、并行服务器和FixPak。
在UNIX 和Linux平台上部署IBM DB2 产品(一)
Oracle 11g中SYS连接阻止关闭数据库(三)
Oracle 11g中SYS连接阻止关闭数据库(二)
Ready? Go! 重新定义你的速度体验!Ready? Go! 重新定义你的速度体验!
选购指南系列之小微企业是否需要NAS?选购指南系列之小微企业是否需要NAS?
华为、DataCore:新的超融合基础设施?
最近多次曝出的DataCore和华为之间的全球合作声明旨在提供基于华为硬件和DataCore虚拟SAN软件的超融合解决方案。
“存储Hypervisor”:从灾难中挽救存储实验室
QLogic FlexSuite Gen 5 FC和FabricCache适配器通过DataCore认证
DataCore存储Hypervisor层为企业提供云存储无缝访问
DataCore宣布加大对VMware vSphere 5.0的支持力度
2011年度VMworld盛会上,存储虚拟化软件的领先供应商DataCore Software宣布,加大对VMware新品vSphere 5.0虚拟化平台的支持力度。
DataCore发布新版SANsymphony-V存储Hypervisor
DataCore软件降低总存储成本并使虚拟化获得最大商业价值
DataCore Software荣获美国技术大奖
&互联网+&时代的安全管理&互联网+&时代的安全管理
山石网科下一代防火墙测试活动随意测 免费得山石网科下一代防火墙测试活动随意测 免费得
IBM最新报告:实时安全呼声紧 部署新型安全技术成要务
IBM(NYSE: IBM)日前发布的调研结果显示,超过80%的安全主管认为,企业面临的外部威胁正与日俱增,近60%的安全主管认为所在企业遇到网络安全大战将难以幸免。
IBM参展首届中国国家网络安全宣传周 携手中国企业共建信息安全
最新Gartner魔力象限报告:IBM成为安全信息与事件管理领导者
IBM发布全新安全解决方案 为企业提供端到端安全管理
Vision Solutions针对IBM Power Systems发布单一用户界面的高可用性
Vision Solutions今天宣布推出MIMIX Availability for IBM i和Double-Take for AIX的主要新版本。
IBM开启“智慧的终端管理”时代 TEM为企业安全保驾护航
IBM宣布将收购OpenPages
IBM公司收购配置和漏洞管理厂商BigFix
SAP Sapphire Now2015大会特别报道SAP Sapphire Now2015大会特别报道
CIO新知:万物互联,智汇创新CIO新知:万物互联,智汇创新
CIO应对SOA架构固有缺陷时刻保持警惕
曾经备受肯定的SOA架构正暴露出其架构的固有缺陷当基于SOA的服务管理达到一定深度时,目前的SOA管理策略在服务故障的追根溯.....
ITIL在企业成功的关键点分析
ITIL流程成功的关键:让人们站在你这一边
变更管理:实施ITIL的良好起点(二)
变更管理:实施ITIL的良好起点(一)
要想跨所有IT流程整体一下子实施IT基础设施库(ITIL),即便不是不可能的,也是不现实的,组织必须决定他们到底想从哪里开始……
ITIL V3:利益协调是成功的关键
卫生信息化的“是”与“不是”
实践出真知 ITIL十宗“罪”
0Windows Server技术资料大放送Windows Server技术资料大放送
12014年终盘点:服务器大佬们的那些事儿2014年终盘点:服务器大佬们的那些事儿
惠普新品齐发 四个词总结2014
在中国惠普企业集团“创新基础设施,赢在IT新型态” 2015财年第一季度新品发布会上,惠普用四个词总结了自己的2014年。
桌面虚拟化喜忧参半
服务器配置之规划工作
2008年服务器业务发展三件事
HP定义企业计算发展三方向
IT技术并非永远都会带来便利。计算技术的不断革新,也为企业级IT用户带来了新的问题。如何解决企业级客户的这些新问题?
刀片:业内首创 惠普服务器二合为一
飞思卡尔:八核心嵌入式处理器发布
思杰透露基于微软Hyper-V虚拟化计划
用WebSphere DataPower SOA Appliances重写SOAPAction报头
IBM WebSphere DataPower通常被用于将一个SOAP/HTTP后端Web服务转换或调整为不同的Web服务接口。在这些情况中,几乎都使用中间逻辑来转换SOAP消息。
SOAP应用模式:处理与性能
在SOAP消息的增量解析和处理模式下,SOAP发送者可能生成了一个非常冗长的SOAP消息,由于等到完整接收这个冗长的SOAP消息后再处理会造成大量的技术时间的浪费……
如何在SOAP应用程序中使用WSDL?
在过去的几年中,出现了一些标准协议,它们提供了XML中间件的一个重要组成部分:网络化服务的要求。这些网络化服务要求是通过网络。
REST vs. SOAP REST暂时安全
看起来在web API协议之争(如果曾经有过)中,潮流正稳步的转向REST,SOAP已经被逼退。Web开发者们选出了他们心目中的目标,他们要RESTful API。
可靠的消息传输协议 有必要吗?
在SOA与Web服务的世界中,一个广为接受的理念是可靠消息传输的必要性。可靠消息传输确保消息发送方发出的消息能到达消息接收方,而且仅到达一次。
云时代中国官方微信
热门技术手册
SOA设计模式汇总
本专题分六部分探讨SOA设计模式,当初设计面向服务架构的一大初衷就是降低服务间耦合度,由此提高服务的灵活性和自由度。
企业服务总线ESB(更新版)
ESB(EnterpriseServiceBus,企业服务总线)是传统中间件技术与XML、Web服务等技术结合的产物。ESB提供了网络中最基本的连接中枢,是构筑企业神经系统的必要元素。
架构框架TOGAF学习指南
TOAGF是一个架构框架,简而言之,TOGAF是一种协助发展,验收,运行,使用,和维护架构的工具。它是基于一个迭代(Iterative)的过程模型,支持最佳实践和一套可重用的现有架构资产。
业务流程管理BPM(更新版)
业务流程管理(businessprocessmanagement,bpm)不是一个新概念,甚至不是一个新名词。它是从相关的业务流程变革领域,如业务流程改进(bpi)、业务流程重组(bpr)、业务流程革新中发展起来的。流程管理技术也是从早期的工作流管理、eai、流程自动化、流程集成、流程建模、流程优化等技术中发展起来的。
大数据应用分析
大数据已经不再是媒体炒作的流行词语,它正在不断冲击着政治、商业、社会、科技诸多领域,已经成为新一轮技术变革的最强音。
云时代中国网站群
商务智能丨
数据中心丨
中小企业丨
All Rights Reserved, Copyright ,云时代中国京ICP备号
热点资讯[]&&&&[]&&&&[]&&&&[]&&&&[]&&&&[]&&&&[]&&&&[]&&&&[]&&&&[]&&&&
AI已来,最应该担心的不是生命,而是存在的意义
德扑AI之父:赢不赢柯洁 阿尔法狗都缺乏实际用处
国产机器人低端过剩魔咒:90%关键零部件靠进口
李开复认为人类没有赢德扑人工智能的可能
李开复:十年后人工智能影响将超之前所有技术总和
土巴兔王国彬:智能家居目前还处于第一个阶段
据美国《汽车新闻》3月31日报道,苹果公司透露将与博世合作,研发无人驾驶汽车。 2017年2月,苹果公司公布了一份供应商合作名单,其中就包括德国博世集团。苹果在公开的名单中提到了博世位于德国罗伊特林根市的分部,而这里恰好是博世的汽车零件供应所在地。
浙江省经信委副主任凌云称机器换人项目至2015年已累计减少普通劳动工人近200万人;安徽正抓紧推进 机器换人 十百千工程;广东、山东等地则都在自身具备比较优势的产业领域大力推动机器换人,已有不少人工岗位被机器人劳动力替代。(5月2日《北京晨报》) 面对
可回收火箭,超级高铁特斯拉CEO马斯克(Elon Musk)让人类进步的速度加快。如今,他提出的大脑植入智能芯片计划正付诸实施,业界五大权威专家对其做出了评估。 据多家媒体消息,马斯克成立的公司Neuralink,将制造能让人脑与电脑直接相连的可植入设备。这不
作者:大壮旅 按:今年,人工智能在各个垂直领域的应用备受关注,其中医疗又是一个关键领域。《纽约客》发表的这篇深度长文,从医学和计算机两个领域详细描述了业内人士如何看待人工智能在医疗诊断方面的应用。作者Siddhartha Mukherjee是医学领域专家。本文
人机大战的消息再次传出,关于人类和AI的对抗再次牵动世界的神经。 我会抱必胜心态、必死信念。我一定要击败阿尔法狗!对于5月23日至27日与围棋人工智能程序AlphaGo(阿尔法狗)的对弈,目前世界排名第一的中国职业九段柯洁放出豪言。然而,AlphaGo(阿尔法
我们就是想让自家工程师失业。 第四范式创始人兼CEO戴文渊接受科技日报记者专访时说。他觉得,AI是个好东西,普通人也该能用。第四范式推出人工智能平台先知,将关于AI的一切傻瓜化,封装起来,交给用户。 创业故事 前段时间,人工智能(AI)企业第四范式在
联想2017全球誓师大会北京站在国奥体育馆举行,杨元庆发表内部演讲,宣布联想将以设备+云为核心,实施三波战略,挺进智能终端和云基础设施领域。 联想以设备+云为核心的三波战略的提出,成为指导未来联想战略投资和布局的核心,同时也是以人工智能驱动PC、数

我要回帖

更多关于 crc16 lua 生成校验码 的文章

 

随机推荐