用Java创建一个通用的Iostream类

时间:2012-10-25 17:09:10

标签: java class iostream

基本上,我需要一个“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类型someKindOfVariable;         IOS myIO =新的IOS(“istream”类型对象,“ostream”类型对象);         public void display(){            myIO.println(someKindOfVariable); //所以这会将它打印到指定的ostream类型对象...这是我不理解的部分:这个ostream对象是什么类型,我如何将它传递给用户制作的类旨在处理任何类型的ostream和任何类型的对象         }

谢谢!

3 个答案:

答案 0 :(得分: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);
    }
  }
}

答案 1 :(得分:0)

Java istreamostream的类似物分别为java.io.InputStreamjava.io.OutputStream。 (或者java.io.Readerjava.io.Writer,如果你正在处理字符而不是字节。)有些子类处理文件,套接字等,以及子类,如DataInputStream和{{1读取和写入字节,整数等。在Java中,将不同类型的流链接在一起以获得所需的内容。

在Java中,你会有像

这样的东西
DataOutputStream

尽管如此,你甚至可能都不需要它。 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 } } 类,以及一个可以读取它们的ObjectOutputStream。几乎所有你要做的就是正确实现ObjectInputStream。 (这听起来有点困难,但并不是那么令人沮丧;基本上,这意味着确保你的可持续内容也是可序列化的。)

答案 2 :(得分:0)

  

然后我会重载cout运算符“&lt;&lt;”,并将其与任何ostream类型变量一起使用。

Java没有运算符重载,因此无法完成此操作。