当我搜索方法有关通过使用SharpZipLib
文件解压缩,我发现很多这样的方法:在FileStream中写入有什么不同?
public static void TarWriteCharacters(string tarfile, string targetDir)
{
using (TarInputStream s = new TarInputStream(File.OpenRead(tarfile)))
{
//some codes here
using (FileStream fileWrite = File.Create(targetDir + directoryName + fileName))
{
int size = 2048;
byte[] data = new byte[2048];
while (true)
{
size = s.Read(data, 0, data.Length);
if (size > 0)
{
fileWrite.Write(data, 0, size);
}
else
{
break;
}
}
fileWrite.Close();
}
}
}
格式FileStream.Write
是:
FileStream.Write(byte []数组, int offset,int count)
现在我尝试分开读写的一部分,因为我想用线程来加快写入函数中的解压缩速度,并且我使用动态数组byte[]
和int[]
存放文件的数据和大小像下面
阅读:
public static void TarWriteCharacters(string tarfile, string targetDir)
{
using (TarInputStream s = new TarInputStream(File.OpenRead(tarfile)))
{
//some codes here
using (FileStream fileWrite= File.Create(targetDir + directoryName + fileName))
{
int size = 2048;
List<int> SizeList = new List<int>();
List<byte[]> mydatalist = new List<byte[]>();
while (true)
{
byte[] data = new byte[2048];
size = s.Read(data, 0, data.Length);
if (size > 0)
{
mydatalist.Add(data);
SizeList.Add(size);
}
else
{
break;
}
}
test = new Thread(() =>
FileWriteFun(pathToTar, args, SizeList, mydatalist)
);
test.Start();
streamWriter.Close();
}
}
}
写:
public static void FileWriteFun(string pathToTar , string[] args, List<int> SizeList, List<byte[]> mydataList)
{
//some codes here
using (FileStream fileWrite= File.Create(targetDir + directoryName + fileName))
{
for (int i = 0; i < mydataList.Count; i++)
{
fileWrite.Write(mydataList[i], 0, SizeList[i]);
}
fileWrite.Close();
}
}
编辑
(1)
byte[] data = new byte[2048]
到while循环将数据分配给新阵列。(2)改变
int[] SizeList = new int[2048]
到List<int> SizeList = new List<int>()
因为INT范围
首先,当它是一个Stream而不是StreamWriter时,调用一个变量'streamWriter'是相当混乱的。我强烈建议你把它叫做'stream'。但我非常期望问题是,当你试图在另一个线程中写入它时,你正在关闭“主”线程中的流。 –
哦,的确如此,我会根据你的推荐进行编辑,谢谢。 – Peter
使用类似IO的线程可能会减慢速度并使其变得越来越麻烦。使用一个线程进行IO。 – Enigmativity