Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用ByteArray解压中的Zlib字符串_Python_Apache Flex_Actionscript 3_Compression_Zlib - Fatal编程技术网

Python 使用ByteArray解压中的Zlib字符串

Python 使用ByteArray解压中的Zlib字符串,python,apache-flex,actionscript-3,compression,zlib,Python,Apache Flex,Actionscript 3,Compression,Zlib,我有一个用AdobeFlex3和Python2.5开发的web应用程序(部署在GoogleAppEngine上)。已经用Python创建了一个RESTful web服务,其结果目前是XML格式的,Flex正在使用HttpService对象读取该格式 现在的主要目标是压缩XML,以便HttpService send()方法和结果事件之间的时间尽可能短。我查阅了Python文档,并设法使用zlib.compress()压缩XML结果 然后,我将HttpService结果类型从“xml”设置为“tex

我有一个用AdobeFlex3和Python2.5开发的web应用程序(部署在GoogleAppEngine上)。已经用Python创建了一个RESTful web服务,其结果目前是XML格式的,Flex正在使用HttpService对象读取该格式

现在的主要目标是压缩XML,以便HttpService send()方法和结果事件之间的时间尽可能短。我查阅了Python文档,并设法使用zlib.compress()压缩XML结果

然后,我将HttpService结果类型从“xml”设置为“text”,并尝试使用ByteArray将字符串解压缩回xml。这就是我失败的地方。我正在做这样的事情:

var byteArray:ByteArray = new ByteArray();
byteArray.writeUTF( event.result.toString() );
byteArray.uncompress();
var xmlResult:XML = byteArray.readUTF();
它在byteArray.uncompress()上抛出异常,并表示无法解压缩byteArray。同样,当我追踪byteArray的长度时,它得到0

不知道我做错了什么。感谢所有的帮助

--编辑--

代码:

# compressing the xml result in Python
print zlib.compress(xmlResult)

# decompresisng it in AS3
var byteArray:ByteArray = new ByteArray();
byteArray.writeUTF( event.result.toString() );
byteArray.uncompress()
事件的类型为ResultEvent

错误:

# compressing the xml result in Python
print zlib.compress(xmlResult)

# decompresisng it in AS3
var byteArray:ByteArray = new ByteArray();
byteArray.writeUTF( event.result.toString() );
byteArray.uncompress()
错误:错误#2058:解压缩数据时出错

该错误可能是因为byteArray.bytesAvailable的值=0,这意味着python生成的原始字节没有正确写入byteArray


--Sri什么是
byteArray.writeUTF(event.result.toString())应该怎么做?compress()的结果既不是unicode也不是“UTF”(后面没有数字就没有意义!?);它是二进制的,也就是原始字节;您不应该对其进行解码或编码,也不应该对其应用任何其他转换。接收器应该立即解压缩它接收到的原始字节,以便恢复传递给zlib.compress()的数据

更新您需要哪些文档来支持
byteArray.uncompress()
所期望的是一个真正的zlib流,而不是deflate流(即,在剪切前2个字节和最后4个字节后的zlib流)

的Flex 3文档给出了以下示例:

bytes.解压缩(CompressionAlgorithm.DEFLATE)

但毫无帮助的是,他没有说明违约(如果有的话)是什么。如果有一个默认值,那么它在任何明显的地方都没有文档记录,所以使用它将是一个非常好的主意

bytes.解压缩(CompressionAlgorithm.ZLIB)

让它明白你的意图

这些文档讨论的是
writeUTFBytes
方法,而不是
writeUTF
方法。您确定您在问题中复制/粘贴了准确的接收器代码吗

更新2

谢谢你的网址。看起来我得到了“帮助”,而不是真正的文档:=(.几点:

(1) 是的,有一个显式的
inflate()
方法。但是解压确实有一个算法arg;它可以是CompressionAlgorithm.ZLIB(默认值)或CompressionAlgorithm.DEFLATE…有趣的是,后者仅在Adobe Air中可用,在Flash Player中不可用。至少我们知道解压()调用看起来正常,我们可以回到将原始字节放到线路上,然后再放到ByteArray实例中的问题

(2) 更重要的是,有
writeUTF
(将UTF-8字符串写入字节流。UTF-8字符串的长度(以字节为单位)首先写入,作为16位整数,然后是表示字符串字符的字节)和
writeUTFBytes
(将UTF-8字符串写入字节流。与writeUTF()方法类似,但writeUTFBytes()不在字符串前面加16位长的字)

无论提供UTF8编码字节(nil,IMHO)有什么好处,您都不希望在这里使用2字节长度的前缀;使用writeUTF()保证会导致uncompress()出错

开始:在二进制数据上使用Python打印似乎不是一个好主意(除非sys.stdout被命名为以原始模式运行,而您的代码中没有显示这种模式)

同样,使用event.result.toString()获取字符串(类似于Python unicode对象,是/否?)——使用什么然后用UTF-8编码似乎不太可能奏效

鉴于我直到今天才知道flex的存在,我真的无法有效地帮助您。以下是一些关于自给自足的进一步建议,以防知道更多flex的人不久就会出现:

(1) 进行一些调试。从一个最小的XML文档开始。Show
repr(XML\u doc)
。Show
repr(zlib\u compress\u output)
。在flex脚本的(精简版本)中,使用最接近
repr()
的函数/方法来显示:
event.result
event.result.toString()
以及
writeUTF*()
的结果。确保您了解zlib.compress()之后可能发生的一切影响。仔细阅读文档可能会有所帮助

(2) 看看如何从event.result中获取原始字节

嗯,,
John

请编辑您的问题,以显示准确的错误消息。在python方面:如何将压缩数据放到线路上?@codeape,zlib.compress()返回一个字符串,该字符串为Flex HttpService对象读取的“打印”。是否正确?zlib.compress(xml)将原始字节作为字符串提供给我?然后我的问题是如何“馈送”将这些原始字节转换为字节数组,然后使用解压缩方法读取XML字符串。或者您是说我需要使用base64.encode()将原始字节编码为字符串?如果这个问题看起来很愚蠢,请原谅::P“既不解码也不编码”==我说您“需要使用base64.encode()”???很简单,接收者必须撤销发送者所做的任何事情。我们不确定发送者做了什么,因为您没有显示发送代码。请编辑您的问题,以包括(a)准确的错误消息(b)发送者代码。什么类型