-1

私のプロジェクト関数は、さまざまなタイプのオブジェクトのArrayListを返しました。後で分析するために、それをどこかに保存または保存する必要があります。しかし、私はいくつかの調査を行い、それをデータベースに保存したり、ファイルに書き込んだりする方法を見つけられませんでした。

オブジェクトのArrayListを保存または保存する方法があれば、それを行うためのより効率的な方法を大いに楽しみにしています。

4

6 に答える 6

2

まず、本当に非ジェネリック コレクションを使用する必要があるのでしょうか。実際に .NET 1.1 をターゲットにしている場合を除き、ほとんどの場合、これを使用する方List<T>が適切です。ArrayList

ObjectOutputStreamJavaでの使用に相当するのはBinaryFormatter、.NET での使用です。GZipStream圧縮に使用できます。これらは名前空間ではなくクラスであることに注意してください。用語を頭の中で整理する価値があります。FileOutputStreamと.NET ではFileInputStreamどちらも で表されます。FileStream

また、.NET または Java でネイティブ バイナリ シリアライゼーションを使用すると、バージョン管理の点で多少不安定になることにも注意してください。JSON、Protocol Buffers、Thrift、XML などの代替手段の使用を検討することをお勧めします。

個人的には、移植先の言語とプラットフォームのイディオムをよく知らずに Java コードを移植しようとするよりも、C# と .NET をゼロから学ぶことをお勧めします。たとえば、 「手動」ブロックを使用してリソースを破棄するので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

たぶん、バイナリシリアル化を使用してバイナリファイルを保存できますか?次に、gzipを使用して圧縮できます。 例へのリンクは次のとおりです

于 2013-03-17T01:58:41.900 に答える
0

本当にXMLが必要ですか?バイナリを試すことはできますか?XMLに保存できないdaataがたくさんありますか?

于 2013-03-18T01:57:36.380 に答える
0

今まで、私の問題に対する良い解決策がありませんでした。しかし、私は Alina B. の提案についていくつかの調査を行い、これを行うためのより基本的な情報を取得しました。オブジェクトのコレクションをファイルに保存するコードがあります。(このコンテキストで簡単にするために、ArrayList ではなく Collection を使用するようにターゲットを変更しました。

//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 に答える