問題タブ [bytestring]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
io - haskellで大きなファイルを読んでいますか?
Haskellで大きなファイルを読み込もうとしています。
大学のプロジェクト用のカスタム アルゴリズムを使用して圧縮する必要があります。大きなファイルの圧縮を開始するまで、すべてが正常に機能します。
プログラムから何がうまくいかなかったのかを抽出し、「Hello big file」の形式でここに公開します。
このファイルに Test.hs という名前を付けて、次の手順を実行します。
惨めな 5 メガバイトのファイルをブラウズするために、500 メガバイトの RAM と 30 秒の CPU が必要な理由を誰か説明してくれませんか? 私は何を間違っていますか?[word8] が ByteString のドキュメントに記載されているようにバッファリングされないのはなぜですか。そして、これを修正する方法は?
foldl、foldr、foldl' の代わりに、独自の末尾再帰フォールドを定義しようとしました。サンクもseqで解凍しようとしました。今のところ結果が出ていません。
行き詰まっているので、助けてくれてありがとう。
io - haskell の大きなファイルに対する IO: パフォーマンスの問題
Haskell を使用して大きなファイルを処理しようとしています。入力ファイルをバイトごとに参照し、バイトごとに出力バイトを生成したいと思います。もちろん、適切なサイズ (数 KB) のブロックで IO をバッファリングする必要があります。私にはそれができません。あなたの助けが必要です。
このファイルに という名前を付けTestCopy.hsて、次の操作を行います。
私の問題: 5MB と 10MB のファイルには大きな違いがあります。パフォーマンスが入力ファイルのサイズに比例するようにしたいと思います。私が間違っていることを教えてください。どうすればこれを達成できますか? 動作する限り、遅延バイト文字列などを使用してもかまいませんが、標準の ghc ライブラリである必要があります。
精度: 大学のプロジェクト用です。そして、私はファイルをコピーしようとしていません。関数は、doSomeStuffカスタマイズする必要がある圧縮/解凍アクションを実行します。
git - Haskellのgitpackfileインデックスからマジックナンバーを取得する
git packfileインデックスからマジックナンバーを取得して、それが実際にパックファイルであることを確認したいと思います。パック形式のドキュメントには、マジックナンバーは「/377tOc」と記載されています。たとえば、Rubyでパックファイルを開くと、ファイルを読み取るときに次のように返されます。
しかし、Haskellではこれがわかります:
明らかな何かが欠けていると思いますが、それが何であるかは私にはわかりません。私はここで何が間違っているのですか?
arrays - ByteStringへのデータ型
次のnewtypeようなファイルに保存したいものがあります。
つまり、基本的にはArray。しかし、多分私はこのような他のデータをいつか追加したいと思います:
等々。私はただ知りたいのですが、これを行うための便利で最適化された関数、ArrayデータByteStringの結合、およびその逆はありますか?または、ない場合は、自分で書く方法。
haskell - いつ ByteString を使用し、いつ使用しないのですか?
私は SPOJ の PRIME1 の問題に対してかなり貧弱な試みを行ってきました。ByteString を使用すると、問題のテキストを読み取る際のパフォーマンスが大幅に向上することがわかりました。ただし、ByteString を使用して結果を書き出すと、実際には Prelude 関数を使用するよりもわずかに遅くなります。私はそれが間違っているのか、それともこれが期待されているのかを理解しようとしています.
(putStrLn.show) と同等の ByteString を 3 つの異なる方法で使用して、プロファイリングとタイミングを実行しました。
- 各候補をテストして、それが素数かどうかを確認します。もしそうなら、それをリストに追加して (putStrLn . show) で書き出します。
- すべての素数のリストを作成し、(putStrLn . unlines. show) を使用してリストを書き出します。
- すべての素数のリストを作成し、map (putStrLn . show) を使用してリストを書き出します。
ある関数でリストを作成し、別の関数でそれを使用しているため、番号 2 と 3 のパフォーマンスが遅くなると予想しました。数値を生成しながら出力することで、リストにメモリを割り当てないようにしています。一方、putStrLn を呼び出すたびにシステム コールを呼び出しています。右?それでテストしたところ、実際には#1が最速でした。
オプション #1 と Prelude ([Char]) 関数を使用すると、最高のパフォーマンスが得られました。ByteString を使用したオプション #1 が最高のパフォーマンスになると予想していましたが、そうではありませんでした。私は怠惰な ByteString のみを使用しましたが、これが問題になるとは思いませんでした。そうでしょうか?
いくつかの質問:
- 大量の整数を stdout に書き込むために、ByteStrings のパフォーマンスが向上すると思いますか?
- パフォーマンスの向上につながる回答を生成して書き出す方法のパターンがありませんか?
- 数値をテキストとして書き出すだけの場合、ByteString を使用する利点はいつありますか?
私の作業仮説は、Integer を ByteString で書き出すのは、それらを他のテキストと組み合わせていない場合は遅くなるというものです。Integers と [Char] を組み合わせると、ByteString を使用した方がパフォーマンスが向上します。つまり、次の ByteString の書き換え:
上記のバージョンよりもはるかに高速になります。これは本当ですか?
読んでくれてありがとう!
haskell - Haskell バイト文字列から 24 ビットの int を読み取るにはどうすればよいですか?
Haskell を使用してバイナリ形式 (PES) を解析しようとしています。
他のデータ (幅、高さ、ステッチ) のオフセットを取得するために pecstart を読み取る必要があります。ビット版。
別のアプローチを使用する必要がありますか? Data.Binary パッケージは単純な形式に適しているようですが、ファイル内の他のデータのオフセットを見つけるために値を読み取る必要があるため、このようなものでどのように機能するかはわかりません。私が行方不明の何か?
haskell - Data.ByteString の findSubstrings と breakSubstring
そのソースにData/ByteString.hsは、関数findSubstringsが推奨されなくなったと書かれていbreakSubstringます。しかし、KMP アルゴリズムを使用して実装された は、素朴なfindSubstringsアルゴリズムで使用されているアルゴリズムよりもはるかに効率的だと思います。breakSubstringなぜこれが行われたのか、誰にも分かりますか?
古い実装は次のとおりです。
そして、ここに新しい素朴なものがあります:
haskell - Data.Binary で再帰的なデータ型を格納する方法
Data.Binary素晴らしいです。一つだけ質問があります。次のようなデータ型があるとします。
これが再帰的なデータ型であることは簡単にわかります。これは、Haskell が遅延型であるため機能します。言語としての Haskell は参照もポインターも使用せず、データをそのまま表示するため、これがどのように保存されるかはわかりません。私は、この素朴な非難が無限のバイトストリングにつながるという強い兆候を持っています...
では、この型を安全に保存するにはどうすればよいでしょうか。
haskell - Haskell iteratee: 末尾の空白を削除する簡単な作業例
Haskell で iteratee ライブラリを使用する方法を理解しようとしています。これまでに目にしたすべての記事は、どのように iteratee を構築できるかについての直感を構築することに焦点を当てているように見えます。iteratees のソース コードを見ることは、私にとってあまり価値がありませんでした。
行から末尾の空白を削除するこの関数があるとしましょう:
私がやりたいことは、これを iteratee にし、ファイルを読み込んで、各行から末尾の空白を取り除いて別の場所に書き出すことです。iteratees を使用してそれを構造化するにはどうすればよいですか? Data.Iteratee.Char に関数があり、これに組み込むことができますが、上記の関数を使用する必要があるかどうか、または上記の関数を iteratee に再パッケージ化する方法がenumLinesBSわかりません。mapChunksconvStream
haskell - Haskell LazyByteString+読み取り/書き込み進行状況関数
HaskellLazyIOを貸し出しています。
コピーの進行状況をコンソールに印刷しながら、大きなファイル(8Gb)をコピーするエレガントな方法を探しています。
ファイルをサイレントにコピーする次の簡単なプログラムについて考えてみます。
レポートに使用するコールバック関数があると想像してください。
質問: onReadBytes関数をLazy ByteStringに織り込んで、正常に読み取られたときにコールバックされるようにするにはどうすればよいですか?または、この設計が適切でない場合、Haskellの方法は何ですか?
注:コールバックの頻度は重要ではありません。1024バイトごとまたは1Mbごとに呼び出すことができます-重要ではありません
答え:答えてくれたcamccannに感謝します。完全に読むことをお勧めします。
Bellowは、camccannのコードに基づいた私のバージョンのコードです。便利な場合があります。