1

基本的に、「myIO」クラスが必要です。これには、プログラマーが最初に入力タイプと出力タイプを指定する必要があります。Javaでこれを行う方法はわかりませんが、cppでは、作成した各クラス内に「toString」または「display」関数を定義して、クラスオブジェクトをコンソールに表示したり書き込みたりできるものに変換します。ファイル。次に、cout演算子 "<<"をオーバーロードし、それを任意のostream型変数で使用します。Javaで同等のistream型とostream型変数が何であるかは基本的にわかりません。だからここに私が本質的に必要なものがあります:

public class IOS<Tin, Tout>{
    private "istream" _inputSource;
    private "ostream" _outputSource;

    public IOS(Tin in, Tin out){
        _inputSource = new "istream"( (typecast if necessary) in );
        _outputSource = new "ostream"( (typecast if necessary) out);
    }

    public String read(){
        //code which reads in data somehow, in c++ I could use stringstreams or something similar
    }

    public void print(ObjectType Object){
        //code to somehow write any object to a file
    }

}

上記のコードブロックでは、TinとToutが入力変数のタイプです。これの形式は重要ではありません、私はこれらがどのタイプである必要があるかを知らないだけです。「istream」と「ostream」はC++の関数の型変数であり、ここでそれらがどうあるべきかわかりません。基本的に、このクラスは、あらゆるタイプのオブジェクトをあらゆるタイプのファイルソースに読み書きできるようにする必要があります。これが不可能な場合は、少なくとも後者を実行する必要があり、タイプごとにオーバーロードすることができます。

これを行う方法について何か良いリソースや考えがあれば、私に知らせてください。私は主にC/C ++コーダーであり、このアプリケーションをJavaで作成することを余儀なくされているため、別の構文で迷子になっています。

抽象クラスでの使用例は次のとおりです。publicclasssomething_abstract(){private Type someKindOfVariable; IOS myIO = new IOS( "istream"タイプのオブジェクト、 "ostream"タイプのオブジェクト); public void display(){myIO.println(someKindOfVariable); //したがって、これは指定されたostreamタイプのオブジェクトに出力されます...これは私が理解していない部分です:このostreamオブジェクトはどのタイプで、どのように渡すのですか?これは、あらゆるタイプのostreamとあらゆるタイプのオブジェクトを処理するように設計されたユーザー作成のクラスになります}

ありがとう!

4

3 に答える 3

0

ある場所からファイルを読み取り、別の場所に書き込むには、Java の最初のサンプル プログラムの基本的な構文を読んでください。

javaでストリームを学ぶためのリンク

http://docs.oracle.com/javase/1.4.2/docs/api/java/io/InputStream.html

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class MainClass {
  public static void main(String[] args) {
    File originFile = new File("c:\\file1.txt");
    File destinationFile = new File("c:\\file1.txt");
    if (!originFile.exists() || destinationFile.exists()) {
      return;
    }
    try {
      byte[] readData = new byte[1024];
      FileInputStream fis = new FileInputStream(originFile);
      FileOutputStream fos = new FileOutputStream(destinationFile);
      int i = fis.read(readData);

      while (i != -1) {
        fos.write(readData, 0, i);
        i = fis.read(readData);
      }
      fis.close();
      fos.close();
    } catch (IOException e) {
      System.out.println(e);
    }
  }
}
于 2012-10-25T17:15:59.327 に答える
0

Java の と の類似物は、istreamそれぞれとです。(または、バイトではなく文字を扱っている場合は and 。)ファイル、ソケットなどを扱うサブクラスと、バイト、int などを読み書きする と のようなサブクラスがあります。Java では、さまざまな型をチェーンします。ストリームをまとめて、必要なものを取得します。ostreamjava.io.InputStreamjava.io.OutputStreamjava.io.Readerjava.io.WriterDataInputStreamDataOutputStream

Javaでは、次のようなものがあります

import java.io.*;

public class IOS<TIn, TOut> {
    private InputStream in;
    private DataOutputStream out;
    public IOS(InputStream in, OutputStream out) {
        this.in = new DataInputStream(in);
        this.out = new DataOutputStream(out);
    }

    public TIn read() {
        // use this.in to read in bytes and assemble an object with them
    }

    public void write(TOut output) {
        // use this.out to write out bytes
    }
}

とはいえ、これは必要ないかもしれません。Java には、ObjectOutputStreamシリアライズ可能なオブジェクトを書き出すことができるクラスと、ObjectInputStreamそれらを読み込むことができるクラスがあります。ほとんどの場合、Serializable正しく実装するだけで済みます。(これは思ったより少し難しいですが、とんでもないことではありません。基本的には、永続化可能なコンテンツもシリアライズ可能であることを確認することを意味します。)

于 2012-10-25T17:33:03.053 に答える
0

次に、cout 演算子「<<」をオーバーロードし、それを任意の ostream 型変数で使用します。

Java には演算子のオーバーロードがないため、これを行うことはできません。

于 2012-10-25T17:33:05.053 に答える