[解決済み] node.jsでバイナリデータをバッファに追記する方法
2023-02-11 11:03:22
質問
バイナリデータを格納したバッファがあります。
var b = new Buffer ([0x00, 0x01, 0x02]);
を追加し、さらに
0x03
.
バイナリデータをさらに追加するにはどうしたらよいでしょうか?ドキュメントを検索していますが、データを追加するためには文字列でなければならず、そうでない場合はエラーが発生します( TypeErrorです。引数は文字列でなければなりません ):
var b = new Buffer (256);
b.write ("hola");
console.log (b.toString ("utf8", 0, 4)); //hola
b.write (", adios", 4);
console.log (b.toString ("utf8", 0, 11)); //hola, adios
それから、私がここで見ることのできる唯一の解決策は、追加されたバイナリデータごとに新しいバッファを作成し、正しいオフセットでメジャーバッファにコピーすることです。
var b = new Buffer (4); //4 for having a nice printed buffer, but the size will be 16KB
new Buffer ([0x00, 0x01, 0x02]).copy (b);
console.log (b); //<Buffer 00 01 02 00>
new Buffer ([0x03]).copy (b, 3);
console.log (b); //<Buffer 00 01 02 03>
しかし、これは少し非効率的に思えます。なぜなら、追記するたびに新しいバッファをインスタンス化しなければならないからです。
バイナリデータを追加するためのより良い方法をご存知ですか?
EDIT
を書きました。 バッファードライター を書き、内部バッファを使用してファイルにバイトを書き込みます。と同じです。 バッファードリーダ と同じですが、書き込み用です。
簡単な例です。
//The BufferedWriter truncates the file because append == false
new BufferedWriter ("file")
.on ("error", function (error){
console.log (error);
})
//From the beginning of the file:
.write ([0x00, 0x01, 0x02], 0, 3) //Writes 0x00, 0x01, 0x02
.write (new Buffer ([0x03, 0x04]), 1, 1) //Writes 0x04
.write (0x05) //Writes 0x05
.close (); //Closes the writer. A flush is implicitly done.
//The BufferedWriter appends content to the end of the file because append == true
new BufferedWriter ("file", true)
.on ("error", function (error){
console.log (error);
})
//From the end of the file:
.write (0xFF) //Writes 0xFF
.close (); //Closes the writer. A flush is implicitly done.
//The file contains: 0x00, 0x01, 0x02, 0x04, 0x05, 0xFF
最終更新日
使用方法 連結 .
どのように解決するのですか?
Node.jsの回答を更新しました ~>0.8
Nodeは以下のことが可能です。 バッファを連結する を自分自身で実行できるようになりました。
var newBuffer = Buffer.concat([buffer1, buffer2]);
Node.js ~0.6 に対する古い回答
私はモジュールを使用して
.concat
関数などを追加しています。
https://github.com/coolaj86/node-bufferjs
私はこれが純粋なソリューションでないことを知っていますが、私の目的には非常によく機能します。
関連
-
[解決済み] Pythonのリストメソッドであるappendとextendの違いは何ですか?
-
[解決済み] Node.jsのプログラムにコマンドライン引数を渡すにはどうしたらいいですか?
-
[解決済み] Node.jsを使うタイミングをどう判断するか?
-
[解決済み] Node.jsで終了する方法
-
[解決済み] Node.jsでファイルを書き込む
-
[解決済み] ファイルへの追記はどのように行うのですか?
-
[解決済み] Bashで標準出力と標準エラーの両方をファイルにリダイレクトして追記する方法
-
[解決済み] Node.jsアプリケーションをデバッグするにはどうすればよいですか?
-
[解決済み] Node.jsのnpmモジュールをアンインストールするにはどうすればよいですか?
-
[解決済み】配列に何かを追加する方法は?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Discord.js が特定のチャンネルにメッセージを送信する場合
-
[解決済み】エラーです。EACCES: 権限が拒否されました、アクセス '/usr/local/lib/node_modules' 。
-
[解決済み】nodemon - app crashed - waiting for file changes before start
-
[解決済み】Passport.js - エラー: ユーザーのセッションへのシリアライズに失敗しました。
-
[解決済み】POSTできない/expressを使用するとエラーが発生する
-
[解決済み] のエラーが発生しました。これはおそらくnpmの問題ではありません。上に追加のログ出力があると思われます
-
[解決済み] TypeErrorです。リクエストパスにエスケープされていない文字が含まれています。
-
[解決済み] nvm は npm config の "prefix" オプションと互換性がありません。
-
[解決済み] エラーです。Expressでビューの検索に失敗しました
-
[解決済み] ノードのバージョンを管理するためのnまたはnvm - 各バージョンのグローバルモジュールを保持することは良いアイデアですか?