-1

我的项目函数返回了各种类型的对象的 ArrayList,我必须将它保存或存储在某个地方以供以后分析。但是我做了一些研究,还没有找到将其存储到数据库或将其写入文件的方法。

如果有任何方法可以保存或存储对象的 ArrayList,我非常期待更有效的方法来做到这一点。

4

6 回答 6

2

首先,你真的需要使用非泛型集合吗?使用它几乎总是List<T>ArrayList除非您实际上是针对 .NET 1.1 更好,这似乎不太可能。

ObjectOutputStream在 Java 中使用的等价物是BinaryFormatter在 .NET 中使用。您可以GZipStream用于压缩。请注意,这些是类,而不是名称空间 - 值得在您的脑海中清理术语。FileOutputStream并且在 .NETFileInputStream中都表示为。FileStream

还值得一提的是,在 .NET 或 Java 中使用本机二进制序列化在版本控制方面有些脆弱。您可能需要考虑使用 JSON、Protocol Buffers、Thrift、XML 等替代方案。

就我个人而言,我建议您从头开始学习 C# 和 .NET,而不是在不真正了解您要移植到的语言和平台的习语的情况下尝试移植 Java 代码。例如,您肯定希望使用using语句而不是使用“手动”finally块来处理资源。

于 2013-03-08T03:17:28.267 回答
1

我在 stackoverflow 上发现了一些有趣的线程:

如何快速保存/加载类实例到文件

从 List<T> 保存到 txt

我认为序列化是你需要的:

于 2013-03-08T03:22:15.257 回答
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); 
    }
}

并阅读并解压缩回来。

于 2013-03-08T03:22:42.343 回答
0

你真的需要 XML 吗?你可以试试binary吗,那里有很多你不能保存到 XML 中的数据?

于 2013-03-18T01:57:36.380 回答
0

到目前为止,我还没有一个好的解决方案来解决我的问题。但我对 Alina B. 的建议进行了一些研究,并获得了一些更基本的信息来做到这一点。我有一个将对象集合保存到文件的代码。(我已将目标更改为使用 Collection 而不是 ArrayList 以使其在这种情况下更容易。

//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、类、整数或其他类型,而不是字符串?如果你在这里,我需要更多帮助。

于 2013-03-08T05:38:05.200 回答
0

也许您可以使用二进制序列化并保存二进制文件?然后你可以使用 gzip 来压缩它。 这是一个示例的链接

于 2013-03-17T01:58:41.900 回答