バッファリングされたioライタが使用され、何らかのエラーが発生した場合、どのように再試行できますか? たとえば、Write()を使用して4096Bを書きましたが、bufwriterが自動的にデータをフラッシュするとエラーが発生します。それから私は4096Bを書き直したいのですが、どうすればいいのですか? 再試行を行うには4096Bのバッファを自分で保つ必要があるようです。その他のデータをフラッシュすることができませんでした。 提案がありますか?バッファに格納されたデータを取得する方法
1
A
答えて
1
再試行の場合に再利用できるように、すべてのデータのコピーを保持するカスタムio.Writer
を使用する必要があります。
この機能は標準ライブラリの一部ではありませんが、実装するのは難しいはずはありません。
1
bufio.Writer
がWrite(..)
で失敗すると、理由(err
)が書き込まれたバイト数(n
)がバッファに返されます。
あなたができることは次のとおりです。 (それは少し間違っている可能性があり、いくつかのクリーンアップを使用できるよう、私はこれをまだ試していない注)
func writeSomething(data []byte, w *bufio.Writer) (err error) {
var pos, written int = 0
for pos != len(data) {
written, err = w.Write(data[pos:])
if err != nil {
if err == io.ErrShortWrite {
pos += written // Write was shot. Update pos and keep going
continue
} else netErr, ok := err.(net.Error); ok && netErr.Temporary() {
continue // Temporary error, don't update pos so it will try writing again
} else {
break // Unrecoverable error, bail
}
} else {
pos += written
}
}
return nil
}
関連する問題
- 1. remoteMethod()に格納された値を取得する方法
- 2. バッファ内に格納されたバイトを変数に変換する方法は?
- 3. 自ノードによって生成された子ノードに格納されたデータを取得する方法は?
- 4. SQLに格納されたデータをフェッチする方法は?
- 5. データベースにmqtt購読されたデータを格納する方法
- 6. データベースオブジェクトに格納されたデータベース行データにアクセスする方法
- 7. データベースから取り出されたデータを変数に格納する方法。
- 8. SQL ServerでJSONデータを格納、フィルタリング、取得する方法
- 9. リストに格納された特定の情報を取得する方法
- 10. elasticsearchインデックスのカスタムマッピングフィールドに格納された値を取得する方法
- 11. 変数に格納されたjQueryオブジェクトの子を取得する方法
- 12. Redisに格納されたオブジェクトを設定して取得する方法は?
- 13. linq呼び出しに格納された値を取得する方法式
- 14. java:arrayListに格納されたインデックスの関連値を取得する方法
- 15. redux計算された値を取得または格納する方法
- 16. XMLHttpRequestで取得したデータをiframeに格納する方法は?
- 17. アプリケーションスコープ内に格納された属性値を取得する
- 18. ViewAnimatorに格納されたWebViewインスタンスを取得する
- 19. 配列に格納されたリストを取得する
- 20. すでにデータが格納されているストアからデータを取得
- 21. プロジェクトにデータを格納する方法
- 22. HBase値byte []に格納された複雑なデータ型を取得する方法
- 23. xcodeファイルのリソースディレクトリにローカルに格納されたxmlファイルにデータを取得
- 24. セレンのスパンクラスに格納されている値を取得する方法
- 25. Java ArrayListに格納されているオブジェクト値を取得する方法
- 26. 値が格納され、方向が変更されたときに値を取得する方法は?
- 27. iOS4に予め格納されたデータ
- 28. SQLに格納された2Dデータ
- 29. HDF5に格納されたデータのサイズ
- 30. plistファイルに格納されている配列データを取得する
は、ときに私それは、)(すべての書き込みに成功した)が、内部フラッシュ(に失敗する可能性があります再試行するためのデータを取得できません。 Write()またはFlush()で失敗した場合は、Reset()を使用して再度使用できるようにする必要があります。 –