小编Big*_*989的帖子

ObjectInputStream的(socket.getInputStream()); 不起作用


我正在编写一个类来与服务器进行通信,但是当它尝试在输入流的帮助下构造ObjectInputStream时程序正在冻结.Theres没有Exception,程序仍然在运行,但挂起在它试图构造ObjectInputstream的行中.

下面是我的问题所在方法的代码:

@Override
public void connect(String ip, int port) throws UnknownHostException, IOException {
    Socket socket = new Socket(ip, port);
    out = new ObjectOutputStream(socket.getOutputStream());
    InputStream is = socket.getInputStream();
    in = new ObjectInputStream(is);
}
Run Code Online (Sandbox Code Playgroud)

这是整个班级的代码:

package Client;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;


public class MessageStreamerImpl implements MessageStreamer {
    ObjectOutputStream out;
    ObjectInputStream in;

    public MessageStreamerImpl(String ip, int port) throws UnknownHostException, IOException{
        connect(ip, port);
    }

    public MessageStreamerImpl(){
    }

    @Override
    public void …
Run Code Online (Sandbox Code Playgroud)

java sockets io

9
推荐指数
1
解决办法
2万
查看次数

将AnyVal案例类(Seq [T <:AnyVal])的序列有效地转换为其运行时表示

假设我有一个值案例类

case class Id(i:Int) extends AnyVal
Run Code Online (Sandbox Code Playgroud)

以及包含此值case类的序列

Seq(Id(1), Id(2), Id(3))
Run Code Online (Sandbox Code Playgroud)

是否有一种方法可以将这些值转换Int为不需要迭代序列(例如通过执行Seq(Id(1), Id(2), Id(3)).map(_.i)

我问的原因是我认为值case case类的优点在于你可以使用在运行时具有本机类型作为表示的值类,因此非常有效.但并非所有使用的库都支持这些类的自动"转换".因此,当它是一个简单的属性时,必须传递本机类型,因为编译器可以优化它.但是当有一个序列时我必须显式地映射它,这意味着在所有值上发生了不必要的迭代,因为它实际上什么也没做,只是在运行时映射到相同的值.有没有办法避免这种情况,并在这种情况下使用编译器的一些优化?

scala seq value-class

6
推荐指数
1
解决办法
69
查看次数

标签 统计

io ×1

java ×1

scala ×1

seq ×1

sockets ×1

value-class ×1