2016-05-13 36 views
0

我正在关注序列化大文件的块时找到的示例here。不知何故,对于序列化来说,我现在已经失去了传递给我的Serialize方法的参数。由于OOM异常,我搁置了使用yesterday的方法。将感谢您的帮助。序列化分块文件

Public Shared Sub ReadAndProcessLargeFile(theFilename As String, ByVal obj As LocalDBObject, Optional whereToStartReading As Long = 0) 
Dim bf As New BinaryFormatter() ' Create a binary formatter for this stream. 

Using fileStram As New FileStream(theFilename, FileMode.Open, FileAccess.Read) 
    Dim buffer As Byte() = New Byte(fileStram.Length - 1) {} 
    fileStram.Seek(whereToStartReading, SeekOrigin.Begin) 
    Dim bytesRead As Integer = fileStram.Read(buffer, 0, buffer.Length) 
    While bytesRead > 0 
     bytesRead = fileStram.Read(buffer, 0, buffer.Length - 1) 
     'It is here where I am now lost. What parameters do I supply to my Serialize method below 
     bf.Serialize() 
    End While 
End Using 
End Sub 
+0

为什么你要读取流如果你想序列化到它? – Gusman

+0

那我该怎么做#Gusman? –

+0

但你想序列化或反序列化?你传递的参数是'whereToStartReading',函数的名字是'ReadAndProcessLargeFile' ...这是没有意义的,你想存储或检索一个对象? – Gusman

回答

0

嗯,该代码是不序列化什么,序列化,你应该这样做:

Public Shared Sub Serialize(theFilename As String, ByVal obj As LocalDBObject) 
    Dim bf As New BinaryFormatter() ' Create a binary formatter for this stream. 

    Using fileStram As File.Create(theFilename) 
     bf.Serialize(fileStram, obj); 
    End Using 
End Sub 

但我怀疑这是不是你想要的,除非你解释一下好你的问题是真的很难理解你想达到什么。

+0

你刚刚提供的代码会给内存异常。已经尝试过了。我想要一个能够将大文件分解成块的串行化程序,然后将其序列化为 –

+0

它不能完成,序列化在内部执行一切操作,所以如果Serialize引发异常(这有点奇怪),那么就不能通过序列化来完成。你确定序列化是正确的工具吗?你一直在说“序列化一个大文件”,LocalDBObject是否有文件的内容?如果是这种情况,那么手动编写文件的内容,不要序列化它。如果将LocalDBObject结构添加到问题中,将有助于理解问题。 – Gusman