【发布时间】:2014-08-28 16:42:15
【问题描述】:
如何创建streamreader的克隆对象,当我对streamreader对象进行序列化时,程序给我异常:
未处理的异常:System.Runtime.Serialization.SerializationException:类型' 程序集 'mscorlib 中的 System.IO.FileStream',版本 = 4.0.0.0,文化 = 中性, 未标记为可序列化。
我该怎么做?
假设我有像文本一样的文本文件:
1
2
3
4
5
我的程序:
[Serializable()]
class Program
{
static void Main(string[] args)
{
Program obj = new Program();
obj.read();
}
void read()
{
StreamReader reader1 = new StreamReader(@"d:\test.txt");
string s = reader1.ReadLine();
Console.WriteLine(s);
SerializeObject("text.txt", reader1);
StreamReader reader2;
for (int i = 0; i < 3; i++)
{
reader1.ReadLine();
}
s = reader1.ReadLine();
Console.WriteLine(s);
reader2 = DeSerializeObject("text.txt");
s = reader2.ReadLine();
Console.WriteLine(s);
}
public void SerializeObject(string filename, StreamReader objectToSerialize)
{
Stream stream = File.Open(filename, FileMode.Create);
BinaryFormatter bFormatter = new BinaryFormatter();
bFormatter.Serialize(stream, objectToSerialize);
stream.Close();
}
public StreamReader DeSerializeObject(string filename)
{
StreamReader objectToSerialize;
Stream stream = File.Open(filename, FileMode.Open);
BinaryFormatter bFormatter = new BinaryFormatter();
objectToSerialize = (StreamReader)bFormatter.Deserialize(stream);
stream.Close();
return objectToSerialize;
}
}
我要输出的必须是:
1
5
2
【问题讨论】:
-
为什么要克隆阅读器?
-
我逐行读取文本文件并与另一个文件匹配如果行匹配然后我想存储该对象的位置并继续使用该对象读取
-
序列化 StreamReader 没有意义,因为 StreamReader 不包含实际数据。你为什么要序列化 StreamReader 本身?通常,您想要存储某种数据,而不是用于读取它的机制。
-
你知道另一种方法吗?
-
序列化是将对象转换为易于存储的格式的过程。如果您有一个具有一堆属性的类,您可以通过将其转换为您喜欢的格式(xml、二进制、protobuf 等)将其序列化到磁盘。另一方面,
StreamReader和StreamWriter是提供读取或写入字符序列的方法的类。 “序列化StreamReader”没有意义,因为StreamReader本身不包含您想要保留的数据。如果您的数据存储为 text,那么您当然不需要BinaryFormatter(binary)。
标签: c# object clone streamreader