1

背景ストーリー:

XML には、これらの Source および Result インターフェースがあります。これらは、Java の異なる XML テクノロジ間のアダプタです。これらのクラスのインスタンスは、DOM、SAX、JAXB、XML ストリーム、XML イベント (その他も?) を表します。

質問:

それで、普通の古い文字列に匹敵するものはありますか? 以下の間のいくつかの一般化?

  • [Input|Output]Stream
  • Reader|Writer
  • StringBuffer
  • StringBuilder
  • CharBuffer(NIOより)
  • File (またはPath、JDK7 ファンの場合)
  • (そして最後に)CharSequence

おそらく、そのような機能を提供する共通の API (Apache commons 何か...?) があるのでしょうか?

明確な例:

古典的なアプローチでの使用法:

インターフェイスは、考えられるすべてのソース (結果) から (へ) 文字を読み取る (書き込む) ことができる必要があります。

interface SomeInterface {
    readFrom(CharacterSequence source);
    readFrom(InputStream source);
    readFrom(Reader source);
    readFrom(File source);
    // ...
    writeTo(CharacterSequence result);
    writeTo(OutputStream result);
    writeTo(Writer result);
    writeTo(File result);
    // ...
}

意図したアプローチでの使用:

いくつかの架空CharacterSourceCharacterResultインターフェイスを使用すると、それぞれ 1 つのメソッドで読み取り/書き込みが可能になります。

interface SomeInterface {
    readFrom(CharacterSource source);
    writeTo(CharacterResult result);
}

意図したアプローチの実装、考えられる階層:

interface CharacterSource
+ class CharBufferSource
+ class InputStreamSource
+ class ReaderSource
+ class FileSource
+ ...

interface CharacterResult
+ class CharBufferResult
+ class OutputStreamResult
+ class WriterResult
+ class FileResult
+ ...

そのような機能が存在しない場合、独自のミニ API を作成する必要がありますか? (より大きな API については、私は現在関与しています)

これはどうですか?

4

3 に答える 3

1

これがあります(そうです - Apache Commons)。

于 2009-10-14T18:19:40.277 に答える
0

Google の common-ioInputSupplierそれにOutputSupplier類似したものは、私が提案したインターフェイスと同じではありませんか? (入力と出力のすべての可能なストリームを一般化する方法)

奇妙なことに、Google のインターフェイスの型パラメーターには制約がありません (Closable何かを考えていました)。

于 2009-11-11T23:44:29.683 に答える
0

Readerとを使用して、インターフェイスを一般化できますWriter。から読み書きしたい場合は、 / を使用Fileできます。同様に、他の/実装を使用して、 (つまり) またはストリームに読み書きすることができます。FileReaderFileWriterReaderWriterStringCharSequence

于 2009-10-14T19:58:17.853 に答える