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 编写这个应用程序,所以我有点迷失在不同的语法中。

抽象类如何使用它的一个例子是: public class something_abstract(){ private Type someKindOfVariable; IOS myIO = new IOS("istream" 类型对象, "ostream" 类型对象); public void display(){ myIO.println(someKindOfVariable);//所以这会将这个打印到指定的ostream类型对象...这是我不明白的部分:这个ostream对象是什么类型,我如何通过这变成了一个用户制作的类,旨在处理任何类型的 ostream 和任何类型的对象}

谢谢!

4

3 回答 3

0

请阅读 java first sample progarm 的一些基本语法以从一个位置读取文件并写入另一个位置

在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和的类似物分别ostreamjava.io.InputStreamjava.io.OutputStream。(或者java.io.Readerand java.io.Writer,如果你处理的是字符而不是字节。)有处理文件、套接字等的子类,还有像DataInputStreamDataOutputStream读写字节、整数等的子类。在 Java 中,你链接不同的类型流一起得到你想要的。

在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 回答