さまざまなハードウェアコンポーネントの温度を監視するプログラムを作成しようとしています。
私が選択した言語はJavaです。今度は温度を読む2つの方法があります。
a) cat /sys/devices/platform/coretemp.0/hwmon/hwmon2/temp1_input
Javaで1つ作成します。Process process = Runtime.getRuntime().exec("cat /sys/devices/platform/coretemp.0/hwmon/hwmon2/temp1_input");
b)File
ポインタを作成し、ファイルを/sys/devices/platform/coretemp.0/hwmon/hwmon2/temp1_input
開いてBufferedReader
温度を読みます。
最初は奇妙に見えます。実際にファイルがどこにあるかを知る準備ができたら、別のプログラムを呼び出してファイルを読み、内容を印刷します。
2番目の考えは、BufferedReader
Linuxカーネルが毎秒ファイルを更新し、7秒ごとにファイルを開こうとしたときに問題が発生する可能性があるという考えでした。
これらの方法のどれがより賢明であるかについての洞察を探しています。
答え1
パフォーマンスと移植性の理由から(以下を参照)、オプションBが好ましいソリューションであるため、ファイルの内容全体を一度に読みます。
文字列の内容 = new Scanner(new File("ファイル名")).useDelimiter("\Z").next();
(したがってスタックオーバーフロー回答)
存在しないファイルによって引き起こされるI / Oエラーを処理し、ゼロバイトの場合はファイルを読み取る必要があります。時間)。
オプションAは最終的に2つのサブプロセスを生成します。まず、シェルを作成してから、予想される cat コマンドを開始するプロセスにコマンドラインを渡します。プログラムを実行しているプロセスに奇妙なパス環境変数がある場合は、catを実行できないか、予期しないタスクを実行できます。これは、システムに依存するフルパス(通常は/ bin / cat)を使用して軽減できます。
通常、他の選択肢がない限り、外部プロセスを作成しないことをお勧めします。