我正在将Python应用程序移植到Android,并且在某些时候,该应用程序必须与Web服务进行通信,并向其发送压缩数据。
为此,它使用下一个方法:
def stuff(self, data):
"Convert into UTF-8 and compress."
return zlib.compress(simplejson.dumps(data))
我正在使用下一种方法来尝试在Android中模拟此行为:
private String compressString(String stringToCompress)
{
Log.i(TAG, "Compressing String " + stringToCompress);
byte[] input = stringToCompress.getBytes();
// Create the compressor with highest level of compression
Deflater compressor = new Deflater();
//compressor.setLevel(Deflater.BEST_COMPRESSION);
// Give the compressor the data to compress
compressor.setInput(input);
compressor.finish();
// Create an expandable byte array to hold the compressed data.
// You cannot use an array that's the same size as the orginal because
// there is no guarantee that the compressed data will be smaller than
// the uncompressed data.
ByteArrayOutputStream bos = new ByteArrayOutputStream(input.length);
// Compress the data
byte[] buf = new byte[1024];
while (!compressor.finished())
{
int count = compressor.deflate(buf);
bos.write(buf, 0, count);
}
try {
bos.close();
} catch (IOException e)
{
}
// Get the compressed data
byte[] compressedData = bos.toByteArray();
Log.i(TAG, "Finished to compress string " + stringToCompress);
return new String(compressedData);
}
但是来自服务器的HTTP响应不正确,我想这是因为Java中的压缩结果与Python中的压缩结果不同。
我运行了一点测试,分别使用zlib.compress和deflate压缩“ a”。
Python,zlib.compress()-> x%9CSJT%02%00%01M%00%A6
Android,Deflater.deflate-> H%EF%BF%BDK%04%00%00b%00b
如何在Android中压缩数据以在Python中获得相同的zlib.compress()值?
任何帮助,指导或指针,我们将不胜感激!
尽管它们不是完全相同的算法,但看起来它们是完全兼容的(例如,如果您使用Deflater.deflate压缩String,则可以使用zlib正确解压缩)。
引起我问题的是,POST中的所有表单变量都必须进行百分比转义,而Android应用程序没有这样做。在将数据发送到Base64之前将其编码,并修改服务器以使用Base64对其进行解码,然后再使用zlib解压缩该数据,从而解决了该问题。
问题内容: 我有一个用于Java和Android项目的通用库,它需要base64编码器/解码器。问题是,Apache commons库无法与Android一起使用,至少不能成功实现-由于Android已经实现且版本更早,因此每当我尝试编码或解码时,都会在运行时导致错误: 返回错误: 如果有人知道同时兼容Java和Android的base64库,或者可以向我解释如何解决Apache Commons问
问题内容: 有没有在Java中使用DirectX的简便方法?特别是DirectX的视频API。 我知道C#可能是一个更自然的选择,但是我出于种种不正当的理由想做些不正当的事情。 问题答案: 我不容易,但您总是可以使用JNI加载DirectX库并调用方法。 使用Swig之类的东西,您可以自动生成很多代码。 不知道这样的事情如何可行。
我的配置单元服务器启用了SSL和Kerberos。但当我尝试使用以下命令通过beeline连接到hiverserver2时: 但得到了同样的错误。 ssl和kerberos互相兼容吗?
我们使用Saxon,从Java中调用它来执行查询。当我们升级到XPath 3.1时,它会像以前一样处理为XPath 2.0编写的所有查询吗?或者某些查询返回的内容是否有变化? 我这样问是因为如果它是100%向上兼容的,我们只需将现有的XPath 2.0代码更改为使用XPath 3.1。但是如果它不同,那么我们需要添加XPath 3.1作为新的数据源类型。 我们确实将XPath 1.0作为不同的数据
问题内容: 在Android编程中,Context类的确切含义是什么? 问题答案: 简单地说: 顾名思义,它是应用程序/对象当前状态的上下文。它使新创建的对象了解正在发生的事情。通常,您调用它来获取有关程序另一部分(活动和程序包/应用程序)的信息。 您可以通过调用获取上下文,,或(当在扩展,从一类Context,如应用程序,活动,服务和IntentService类)。 上下文的典型用法: 创建新对
我可以安全地将持久化viewmodel数据的代码放入viewmodel的方法中吗?如果应用程序由于任何原因被终止或结束,那么这是否保证了ViewModel的数据将被放在持久存储中,或者是否存在不能调用的情况?