- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我有应该进行压缩的代码:
FileStream fs = new FileStream("g:\\gj.txt", FileMode.Open);
FileStream fd = new FileStream("g:\\gj.zip", FileMode.Create);
GZipStream csStream = new GZipStream(fd, CompressionMode.Compress);
byte[] compressedBuffer = new byte[500];
int offset = 0;
int nRead;
nRead = fs.Read(compressedBuffer, offset, compressedBuffer.Length);
while (nRead > 0)
{
csStream.Write(compressedBuffer, offset, nRead);
offset = offset + nRead;
nRead = fs.Read(compressedBuffer, offset, compressedBuffer.Length);
}
fd.Close();
fs.Close();
我认为是这样,但我想解压缩按上述方式压缩的内容。我是这样想的:
FileStream fd = new FileStream("g:\\gj.new", FileMode.Create);
FileStream fs = new FileStream("g:\\gj.zip", FileMode.Open);
GZipStream csStream = new GZipStream(fs, CompressionMode.Decompress);
byte[] decompressedBuffer = new byte[500];
int offset = 0;
int nRead;
nRead=csStream.Read(decompressedBuffer, offset, decompressedBuffer.Length);
while (nRead > 0)
{
fd.Write(decompressedBuffer, offset, nRead);
offset = offset + nRead;
nRead = csStream.Read(decompressedBuffer, offset, decompressedBuffer.Length);
}
fd.Close();
fs.Close();
这里没有...我在进入循环之前得到了 nRead = 0...我做错了什么?我使用的测试文件是最简单的TEXT文件(大小:104字节)...
最佳答案
我的第一个想法是你还没有关闭csStream
。如果你使用 using
这会自动发生。由于 gzip 缓冲数据,您可能会丢失一些数据。
其次;不要增加 offset
;那是 buffer(不是流)中的偏移量。离开 0:
using (Stream fs = File.OpenRead("gj.txt"))
using (Stream fd = File.Create("gj.zip"))
using (Stream csStream = new GZipStream(fd, CompressionMode.Compress))
{
byte[] buffer = new byte[1024];
int nRead;
while ((nRead = fs.Read(buffer, 0, buffer.Length))> 0)
{
csStream.Write(buffer, 0, nRead);
}
}
using (Stream fd = File.Create("gj.new.txt"))
using (Stream fs = File.OpenRead("gj.zip"))
using (Stream csStream = new GZipStream(fs, CompressionMode.Decompress))
{
byte[] buffer = new byte[1024];
int nRead;
while ((nRead = csStream.Read(buffer, 0, buffer.Length)) > 0)
{
fd.Write(buffer, 0, nRead);
}
}
关于c# - GZipStream 和解压,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1581694/
知道我该怎么做吗?我能够压缩单个文件。 最佳答案 您不能直接 GZip 整个文件夹,因为 GZip 对单个数据流进行操作。您首先必须将文件夹转换为这样的流。 一种方法是创建一个 Tar archive
下面这段代码有什么问题。我总是得到 FALSE,意思是压缩后,解压后的数据与原始值不匹配。 public static bool Test() { string
我正在尝试在 C# 中使用 gzip 流,但压缩后的文件似乎比以前大。当我处理 .avi 和 .mkv 文件时会发生这种情况。但是,如果我使用比原始文件小的 .txt 和 .html 压缩文件。 us
我正在尝试使用 Gzip 压缩来压缩 JSON 文件以发送到另一个位置。它每天需要处理 5,000 - 10,000 个文件,我不需要本地机器上文件的压缩版本(它们实际上正在传输到 AWS S3 以进
我的 GZipStream 只会解压缩文件的第一行。通过 7-zip 提取内容按预期工作并为我提供了整个文件内容。它还在 cygwin 和 linux 上使用 gunzip 按预期提取,所以我希望这是
打开zip文件时出现问题。我正在使用以下代码来压缩文件: public static string Zip_File(string soruce , string target) { try
我正在 Windows Phone 7 上开发一个应用程序。我需要压缩/解压缩我的数据以便通过 tcp 套接字发送它。 但我一直没能找到任何 gzip 压缩器用于通过 tcp 套接字的仅转发流。 请帮
我有应该进行压缩的代码: FileStream fs = new FileStream("g:\\gj.txt", FileMode.Open); FileStream fd = new FileSt
我在 .NET 4.0 中遇到了一些奇怪的依赖于机器/操作系统的 GZipStream 行为。这是相关代码: public static string Compress(string input) {
我正在尝试压缩大量数据,有时在 100GB 左右,当我运行我编写的例程时,它看起来文件大小与以前的大小完全相同。还有其他人遇到过 GZipStream 的这个问题吗? 我的代码如下:
我遇到了一个针对 .Net 3.5 的 gzipstream 的讨厌问题。这是我第一次使用 gzipstream,但是我已经模仿了许多教程,包括 here我仍然卡住了。 我的应用程序将数据表序列化为
我正在尝试读取文件并使用 GZipStream 压缩它,如下所示: using (var outStream = new MemoryStream()) { using (var fileSt
我需要一种将 GZipStream 写入字符串的方法。 我正在使用: GZipStream Decompress = new GZipStream(inFile, CompressionMode.De
我正在尝试将大型 UInt16 数组保存到文件中。 positionCnt大约是50000,stationCnt大约是2500。直接保存,没有GZipStream,文件大约250MB,可以通过外部zi
我有一些代码可以下载 gzip 文件并解压缩它们。问题是,我无法让它解压缩整个文件,它只读取前 4096 个字节,然后再读取大约 500 个字节。 Byte[] buffer = new Byte[4
我正在使用以下代码来压缩文件并且它工作正常但是当我使用 WinRar 解压缩时我得到没有扩展名的原始文件名,任何线索为什么如果文件名是 myReport.xls 当我解压缩我只得到 myReport
我正在使用 .NET 框架中的 GZipStream 类压缩一些数据包。一切正常,压缩率也不错,但是当我使用十六进制编辑器查看压缩数据时,我注意到每个压缩数据包中有多达三分之一是尾随零。这正常吗? 大
我正在使用 .NET 框架中的 GZipStream 类压缩一些数据包。一切正常,压缩率也不错,但是当我使用十六进制编辑器查看压缩数据时,我注意到每个压缩数据包中有多达三分之一是尾随零。这正常吗? 大
我正在尝试将非常大的对象直接序列化为 zip 流。我设法通过在中间步骤中序列化到文件流、将其加载回来然后压缩它来做到这一点。 我还尝试过直接压缩到内存流并且它有效。但是当我使用 GZipStream
我可以获取磁盘上文件的 GZipStream 而不将整个压缩内容写入临时存储吗?我目前正在磁盘上使用临时文件,以避免在非常大的文件上使用 MemoryStream 可能出现的内存耗尽(这工作正常)。
我是一名优秀的程序员,十分优秀!