使用以下Java代码将字节[]压缩/解压缩到GZIP或从GZIP解压缩.第一个文本字节为gzip字节:
public static byte[] fromByteToGByte(byte[] bytes) {
ByteArrayOutputStream baos = null;
try {
ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
baos = new ByteArrayOutputStream();
GZIPOutputStream gzos = new GZIPOutputStream(baos);
byte[] buffer = new byte[1024];
int len;
while((len = bais.read(buffer)) >= 0) {
gzos.write(buffer, 0, len);
}
gzos.close();
baos.close();
} catch (IOException e) {
e.printStackTrace();
}
return(baos.toByteArray());
}
Run Code Online (Sandbox Code Playgroud)
然后将压缩字节转换为未压缩字节的方法:
public static byte[] fromGByteToByte(byte[] gbytes) {
ByteArrayOutputStream baos = null;
ByteArrayInputStream bais = new ByteArrayInputStream(gbytes);
try {
baos = new ByteArrayOutputStream();
GZIPInputStream gzis = …Run Code Online (Sandbox Code Playgroud) 在我的一台 RedHat Linux 服务器上已经设置了几台设备。/dev/ap 和 /dev/reuter。它们是美联社和路透社的新闻提要。在 unix 命令行中,我可以执行“cat /dev/ap”,它会一直等到消息从提要出现并将其打印到标准输出。一旦流中出现暂停, cat 就会完成。我尝试了“更多”并得到了相同的结果,同样的结果是 less -f(完整的味精,可能是运气)和 tail -f 在一个小时内没有输出。
我知道这些是流,但是当我尝试在 new Reader("/dev/ap") 上打开 Java BufferReader 时,我没有得到任何输出。使用以下运行方法:
public void run() {
String line = null;
while(true) {
try {
while((line = bsr.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
Run Code Online (Sandbox Code Playgroud)
几个问题:
1. 某些 unix 命令是否仅限于从文件打开流?例如尾巴?2.我在Java方面做错了什么,我无法捕获输出?错误的流类型,错误的包装器类型?吉姆
在sybase图像类型列中包含一些我想在C#应用程序中使用的数据.Java使用java.util.zip包压缩了数据.我想测试我可以解压缩C#中的数据.所以我编写了一个测试应用程序,将其从数据库中删除:
byte[] bytes = (byte[])reader.GetValue(0);
Run Code Online (Sandbox Code Playgroud)
这给了我一个2479长度的压缩字节[].
然后我把它传递给一个看似标准的C#解压缩方法:
public static byte[] Decompress(byte[] gzBuffer)
{
MemoryStream ms = new MemoryStream();
int msgLength = BitConverter.ToInt32(gzBuffer, 0);
ms.Write(gzBuffer, 4, gzBuffer.Length - 4);
byte[] buffer = new byte[msgLength];
ms.Position = 0;
GZipStream zip = new GZipStream(ms, CompressionMode.Decompress);
zip.Read(buffer, 0, buffer.Length);
return buffer;
}
Run Code Online (Sandbox Code Playgroud)
msgLength的值是1503501432,这似乎超出了范围.原始文件应在5K-50k的范围内.无论如何,当我使用该值创建"缓冲区"时,我得到一个OutOfMemoryException.怎么了?吉姆
Java压缩方法如下:
public byte[] compress(byte[] bytes) throws Exception {
byte[] results = new byte[bytes.length];
Deflater deflator = new Deflater();
deflater.setInput(bytes);
deflater.finish();
int len = deflater.deflate(results);
byte[] out = new byte[len];
for(int i=0; …Run Code Online (Sandbox Code Playgroud) C#代码:
class Program
{
static void Main(string[] args)
{
TFWrapper tf;
String lexDir = ".......";
String lic = "........";
String key = ".........";
ArrayList cats = new ArrayList();
Boolean useConj = false;
String lang = "english";
String encoding = "auto";
tf = new TFWrapper(lexDir, lic, key, cats, useConj, lang, encoding);
}
}
Run Code Online (Sandbox Code Playgroud)
被调用的托管C++方法:
TFWrapper::TFWrapper(String^ mlexDir, String^ mlic, String^ mkey, ArrayList catList, Boolean^ m_useConj, String^ m_lang, String^ m_encoding);
Run Code Online (Sandbox Code Playgroud)
C#的最后一行语言错误不支持获取'.ctor'