【问题标题】:Using DataInputStream and DataOutputStream使用 DataInputStream 和 DataOutputStream
【发布时间】:2013-03-12 11:09:15
【问题描述】:

我想使用 DataInputStream 将多个字符串从 A 发送到 B。

我知道如何使用.write() 发送这些内容,但我不确定分隔字符串的最佳方法。事实上 - 经过研究,除非我在字符串中添加一个字符并在 B 处拆分,否则似乎不可能。

将考虑使用DataInputStream 的任何替代方法。我打算创建一个 Array 并将其发送出去,虽然我不知道该怎么做。

到目前为止我有:

public String getDetails() {       
 System.out.print("Name: ");
 String uiname = scan.next();
 pout.write(uiname);

 System.out.print("Address: ");
 String uiaddress = scan.next();

 pout.write(uiaddress);

 return "";

}

【问题讨论】:

  • 使用DataInput-/OutputStream有什么问题?如果你正在使用它,你正在发送二进制数据。无需分隔您的字符串,因为它们是作为单个对象发送的。
  • 我有流工作,但是当我在 B 打印流时,它将所有字符串连接在一起。我只是想知道解决这个问题的方法。与我尝试过的方法相比,一定有更好的方法。

标签: java arrays datainputstream dataoutputstream


【解决方案1】:

只要您的字符串长度 DataOutputStream.writeUtf() 和DataInputStream.readUTF()。如果您需要比字符串和原语更复杂的东西,则需要使用ObjectOutputStreamObjectInputStream

示例(可能包含语法错误):

DataOutputStream out = new DataOutputStream(...);
out.writeUtf("foo");
out.writeUtf("bar");
out.close();

DataInputStream in = new DataInputStream(...);
String s1 = in.readUtf();
String s2 = in.readUtf();
// that's all, folks!

writeUtf() 方法在字符串前面加上其字符数。 readUtf() 方法首先获取字符数,然后准确读取那么多字符。只要你只是写/读字符串,流就可以搞定。

【讨论】:

    【解决方案2】:

    两个想法:

    • 使用DataOutputStream.writeUTFDataInputStream.readUTF

    • 1234563 @ 足以完成任务)

    【讨论】:

    • 为什么是对象流? DataInput/OutputStreams 有这些方法。
    • 是的。我正在考虑编写 Objects 实例,但没有意识到它在父类中可用
    猜你喜欢
    • 2013-09-03
    • 2018-03-09
    • 1970-01-01
    • 2012-03-23
    • 1970-01-01
    • 2014-06-04
    • 2012-02-13
    • 1970-01-01
    • 2015-07-30
    相关资源
    最近更新 更多