最近 C# ネットワーキングの学習を始めましたが、受信したバイト配列がファイルか文字列かをどのように判断すればよいのでしょうか?
5 に答える
バイト配列は単なるバイト配列です。データが入っているだけです。
そのデータをどう解釈するかはあなた次第です。たとえば、テキスト ファイルと文字列の違いは何ですか?
基本的に、アプリケーションがデータの解釈方法を知る必要がある場合は、それをプロトコルに組み込む必要があります。
バイト配列は単なるバイト配列です。ただし、元のバイト配列に、その型を説明するバイトを含めることができます (作成者が自分であると仮定します)。次に、この記述子バイトを見つけて、それを使用して決定を下します。
文字列はエンコードされたバイト配列です。ファイルには、文字列やバイナリ データを含めることができます。
ASCII 文字列は、0 ~ 127 のバイト値を使用して、文字と制御コードを表します。UTF8 の場合、人々は検証ルーチンを作成しました ( https://stackoverflow.com/a/892443/884862 )。
配列がバイナリ ファイルであると想定する前に、すべての文字列エンコーディング特性について配列をチェックする必要があります。
edit .NET を使用したファイル タイプの分類に関する SO の質問です。ファイルの署名 (最初の X バイト) を使用して拡張子ではなく、ファイルの署名に基づいてファイルの MIME タイプを特定し、MIME タイプを特定する方法を教えてください。
いいえ、できません。データはデータです。ネットワーク通信形式のプロトコルの上にレイヤーを作成する必要があります。次のように記述する必要があります。これは、それに続くテキスト文字列の長さです...1
int
2
」
独自のプロトコルを発明するよりもはるかに簡単な解決策は、WCFのような高レベルの抽象化を提供する事前構築済みのプロトコルを使用することです。これにより、バイト配列を処理する必要がなくなります。
「ファイル」ではなく、配列にはデータが含まれています。その配列をループしてデータを書き込む必要があります。
これを試して:
foreach(string data in array)
{
Console.WriteLine(data);
}
ここで、文字列ではなくデータが含まれている場合は、単純に
foreach(var data in array)
{
Console.WriteLine(data.ToString());
}