我的项目函数返回了一个包含各种类型对象的ArrayList,我必须将其保存或存储到以后分析的位置。但我做了一些研究,但没有找到将其存储到数据库或将其写入文件的方法。
如果有任何方法可以保存或存储对象的ArrayList,我非常期待有效的方法。
答案 0 :(得分:2)
首先,真的是否需要使用非泛型集合?使用List<T>
而不是ArrayList
几乎总是总是,除非你实际上以.NET 1.1为目标,这似乎不太可能。
在Java中使用ObjectOutputStream
的等价物是在.NET中使用BinaryFormatter
。您可以使用GZipStream
进行压缩。请注意,这些是类,不是名称空间 - 值得在您的脑海中清除术语。 FileOutputStream
和FileInputStream
都由.NET中的FileStream
表示。
值得注意的是,在版本控制方面,在.NET或Java中使用本机二进制序列化有点脆弱。您可能需要考虑使用JSON,Protocol Buffers,Thrift,XML等替代方案。
就我个人而言,我建议您从头开始学习C#和.NET,而不是在不知道您移植到的语言和平台的习语的情况下尝试移植Java代码。例如,您肯定希望使用using
语句而不是使用“手动”finally
块来处理资源。
答案 1 :(得分:1)
答案 2 :(得分:1)
以下将压缩对象并保存到文件:
using System;
using System.IO;
using System.IO.Compression;
using System.Runtime.Serialization.Formatters.Binary;
public static void WriteFile<T>(T obj, string path)
{
using (FileStream fs = File.OpenWrite(path))
using (GZipStream gzip = new GZipStream(fs, CompressionMode.Compress))
{
BinaryFormatter bf = new BinaryFormatter();
bf.Serialize(gzip , obj);
}
}
public static T LoadFile<T>(string path)
{
using (FileStream fs = File.OpenRead(path))
using (GZipStream gzip = new GZipStream(fs, CompressionMode.Decompress))
{
BinaryFormatter bf = new BinaryFormatter();
return (T)bf.Deserialize(gzip);
}
}
阅读并解压缩。
答案 3 :(得分:0)
//Here I call the method with parameter of Collection of objects
Collection<object> list = new Collection<object>();
list.Add("value1");
list.Add("value2");
list.Add("value3");
SaveListToFile(list);
public void SaveListToFile(Collection<object> list)
{
var serializer = new XmlSerializer(typeof(Collection<object>));
using (var writer = new StreamWriter(Server.MapPath("~/Files/test.xml")))
serializer.Serialize(writer, list);
}
在上面的方法中,我使用XmlSerializer将对象集合写入xml文件。如果Collection中的每个元素都是一个字符串,那么该方法运行得非常好。但是,如果我将任何其他对象添加到集合中,如类,ArrayList或其他一些对象类型,它将生成错误(生成XML文档时出错。)我不能保存集合。那么如何保存像ArrayList,类,整数或其他类型但不是字符串的对象集合?如果你在这里,我还需要一些帮助。
答案 4 :(得分:0)
也许您可以使用二进制序列化并保存二进制文件?然后你可以使用gzip来压缩它。 Here's a link to an example
答案 5 :(得分:0)
你真的需要XML吗?您可以尝试二进制,那里有很多daata,你不能只保存到XML中吗?