【问题标题】:What is the difference between ObjectInputStreamReader and InputStreamReader?ObjectInputStreamReader 和 InputStreamReader 有什么区别?
【发布时间】:2012-05-23 13:22:38
【问题描述】:

我的老师说在文件服务器程序ObjectInputStreamReader是必须写的。当我问原因时,他说我对文件服务器程序很舒服。我认为这不是必要的理由。为什么不能使用InputStreamReader 或其他替代方式? ObjectInputStreamReaderInputStreamReader 有什么优势。

这里的客户端/服务器代码:

public class Client {
    public static void main(String[] args) {
        Socket s = null;
        ObjectInputStream ois = null;
        ObjectOutputStream oos = null;
        Scanner sc = new Scanner(System.in);

        String data = "";
        try {
            s = new Socket("localhost", 1234);
            System.out.println("client is connectd");

            ois = new ObjectInputStream(s.getInputStream());
            String jai = (String) ois.readObject();
            System.out.println("DATA from SERVER:" + jai);
            oos = new ObjectOutputStream(s.getOutputStream());
        } catch (Exception e) {
            e.printStackTrace();
        }

        System.out.println("Enter file name:");
        try {
            String fil = (String) sc.next();
            OutputStream pw = new FileOutputStream(fil + ".new");
            oos.writeObject(fil);
            data = (String) ois.readObject();
            pw.write(data.getBytes());
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
        System.out.println("Content of file:" + data);
    }
}

谁能说出真正的原因是什么?

【问题讨论】:

  • 没有像“ObjectInputSramReader”这样的类。甚至没有“ObjectInputStreamReader”。请注意,您的示例代码使用 ObjectInputStream - 这里没有“阅读器”部分。 ObjectInputStream 和 InputStreamReader 完全不同...但您还没有告诉我们您要实现什么

标签: java inputstream objectinputstream


【解决方案1】:

我认为您的意思是 ObjectInputStreamBufferedInputStream(不是读者)。

ObjectInputStream 包装输入流并提供允许从流中读取特定类型数据的类型化方法。例如readDouble()readObject()等。

BufferedInputStream 不提供额外的 API(与常规的 InputStream 相比)。它唯一做的就是缓冲数据,即它逐块读取数据,这比逐字节读取要有效得多。

【讨论】:

  • 我必须使用 ObjectInputStraemReader 来读取文件。
【解决方案2】:

InputStream 是一个抽象类,可用于定义任何类型的输入流,包括从文件系统、URL、套接字等读取。

您实际上并没有创建InputStream,因为它本身并没有任何意义。相反,您创建一个InputStreamtype,它定义了如何读取/写入特定类型的数据,例如建议的ObjectInputStream。此类定义正在写入的数据是 Java Object(实现 SerializableExternalizable)。还有其他 InputStreams 用于通用文件数据、图像、音频和一系列其他类型。

没有ObjectInputStreamReader 这样的东西,除非你自己编写这样一个类,目的是写到ObjectInputStream

请参阅ObjectInputStreamInputStream Java 文档以获得更多启发

【讨论】:

    猜你喜欢
    • 2011-11-14
    • 1970-01-01
    • 2010-10-02
    • 2011-12-12
    • 2010-09-16
    • 2012-03-14
    • 2012-02-06
    • 2011-02-25
    • 2011-11-22
    相关资源
    最近更新 更多