标签: objectoutputstream

ObjectInputStream始终检索空List

我正在开发一个Client-Server项目(你可以称之为"广播聊天"),但我遇到了ObjectInputStream的问题.它总是检索我一个空列表,我找到了解决方案,但我不知道为什么它的工作原理...

这是有问题的代码(检查服务器的sendMsg()函数):

服务器:

public class CoreServer implements Runnable {
    private Socket sock;
    private ServerConnect sc;
    private ObjectOutputStream oos;
    private ObjectInputStream ois;
    private boolean running=true;
    private List<String> lstr;
    public CoreServer(Socket sock, ServerConnect sc) {
        this.sock=sock;
        this.sc=sc;
    }

    @Override
    public void run() {
        lstr=new LinkedList<String>();
        try {
            oos= new ObjectOutputStream(sock.getOutputStream());
            ois=new ObjectInputStream(sock.getInputStream());


        } catch (IOException e) {
            e.printStackTrace();
        }
        while (running){
            Object o=null;
            try {
                o= ois.readObject();

            } catch (ClassNotFoundException | IOException e) {
                // TODO Auto-generated catch block
                sc.remove(this);
                stop();
            } …
Run Code Online (Sandbox Code Playgroud)

java objectoutputstream objectinputstream

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

尝试资源中的ObjectOutputStream

我正在使用ObjectOutputStream将数据写入文件。以下是代码段。

try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(f))) 
{
    oos.writeObject(allObjects);
}
Run Code Online (Sandbox Code Playgroud)

问题:

  1. 我是否需要在try-with-resources中分别拆分OOS和FOS的对象构造?我认为OOS在内部也会关闭FOS。所以上面的代码行应该没问题。
  2. 我需要显式调用冲洗吗?

文件损坏后,我看到的问题是在调试时遇到了上述查询。

java flush objectoutputstream fileoutputstream

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

Java:具有Seri​​alizable问题的ObjectOutputStream

我有这三个类:

命令:

package pack;

public abstract class Command impements java.io.Serializable
{
    public abstract void execute();
}
Run Code Online (Sandbox Code Playgroud)

客户:

package pack;

// imports....

public class Client
{
    Socket socket;

    // Constructor...

    public void sendCommand(Command c)
    {
         try
         {
              new ObjectOuputStream(socket.getOutputStream()).writeObject(c);
         } catch (Exception e) {e.printStackTrace()};
    }
}
Run Code Online (Sandbox Code Playgroud)

MyKeyListener:

此keylistener将添加到JFrame中的组件中.

public class MyKeyListener implements KeyListener
{

     private Client client;

     public MyKeyListener(Client c)
     { client = c; }


     public void keyTyped(....)......; // This method does nothing

     public void keyPressed(KeyEvent e)
     {
          client.sendCommand(new Command() { …
Run Code Online (Sandbox Code Playgroud)

java sockets serialization objectoutputstream

0
推荐指数
1
解决办法
692
查看次数

获取ObjectOutputStream/ObjectInputStream的进度

我最近想出了如何使用ObjectOutputStream和ObjectInputStream通过服务器和客户端之间的简单Java套接字连接发送对象.我想知道我是否想要传输一个可能很大的对象,例如一个图像,是否可以设置一个线程来跟踪已经发送/接收了多少数据的进度?如果这个问题的答案不是很直接,有人可以解释一下我可能会做些类似的事吗?提前致谢!

java sockets progress objectoutputstream objectinputstream

0
推荐指数
1
解决办法
1374
查看次数

找不到符号ois

我正在编写简单的客户端 - 服务器应用程序,但我有这个愚蠢的问题(它简化了示例(当我不使用java序列化时一切正常)):

    ServerSocket serversocket=null;
    Socket socket=null;    
    String slowo=null;

    try {
        serversocket=new ServerSocket(8877);
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    try {
        socket=serversocket.accept();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    try {
        ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    try {
        ObjectOutputStream oos=new ObjectOutputStream(socket.getOutputStream());
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    slowo=(String)ois.readObject();
Run Code Online (Sandbox Code Playgroud)

我的编译器显示:

Serwer.java:51: cannot …
Run Code Online (Sandbox Code Playgroud)

java serialization objectoutputstream objectinputstream

0
推荐指数
1
解决办法
632
查看次数

NockPointerException当Mockito嘲笑ObjectOutputStream.writeObject吗?

我正在编写一个jUnit测试,检查类将什么写入ObjectOutputStream。

具体来说,我正在检查一个类是否正在以某种类型调用writeObject:

ObjectOutputStream out = mock(ObjectOutputStream.class);

out.writeObject(new Something());

verify(out).writeObject(isA(Something.class));
Run Code Online (Sandbox Code Playgroud)

但是Java抱怨里面有NullPointerException writeObject

我需要存根解决此问题吗?

java junit mocking objectoutputstream mockito

0
推荐指数
1
解决办法
757
查看次数

writeObject(this)无法写入对象,java

我使用ObjectOutputStream来保存对象,但是当我使用.writeObject(this)将其保存为文件时,无法保存该材料.我定义的类已经可序列化了.

public class LanguageModel implements Serializable {


private static LanguageModel lm_;

/* ******************************* */
//word -> count(w)
public static Dictionary unigramDict = new Dictionary();
//word_pair -> count(wi,wi+1)
public static Dictionary bigramDict = new Dictionary();

private static int wordIdCounter = 0;
/* ***************************** */


// Do not call constructor directly since this is a Singleton
private LanguageModel(String corpusFilePath) throws Exception {
    constructDictionaries(corpusFilePath);
}


public void constructDictionaries(String corpusFilePath)
        throws Exception {

    ...
    }

// Saves the object (and all associated data) to …
Run Code Online (Sandbox Code Playgroud)

java objectoutputstream

0
推荐指数
1
解决办法
1073
查看次数

为什么ObjectOutputStream.writeObject在写字节数组时比写字节更快?

我做了一个小的基准测试,发现ObjectOutputStream.writeObject速度比ObjectOutputStream.write(byte[] bytes)我快,但我似乎无法找到可能的解释,因为在引擎盖下,writeObjectObjectOutputStream.write(byte[] bytes)间接调用

测试代码

public static void main(String[] args) throws Exception {
    byte[] bytes = new byte[10000];
    for (int i = 0; i < 10000; ++i) {
        bytes[i] = (byte) (i % 256);
    }

    ByteArrayOutputStream out2 = new ByteArrayOutputStream();
    try(ObjectOutputStream ostream2 = new ObjectOutputStream(out2)) {

        for (int i = 0; i < 10000; ++i) {
            ostream2.writeInt(bytes.length);
            ostream2.write(bytes, 0, bytes.length);
        }

        out2.reset();

        long start = System.nanoTime();
        for (int i = 0; i < …
Run Code Online (Sandbox Code Playgroud)

java objectoutputstream

0
推荐指数
1
解决办法
495
查看次数

JMS - 如何将消息发送回客户端?

这是我的客户端代码:

\n\n

公共类 ABCServlet 扩展 HttpServlet {

\n\n
protected void doGet(HttpServletRequest request,\n                 HttpServletResponse response){\n//do blah blah\nString msg = null;\n\njava.io.OutputStream os = response.getOutputStream();\njava.io.ObjectOutputStream oos = new java.io.ObjectOutputStream(os);\noos.writeObject(msg);\nmsg = null;\noos.flush();\noos.close();\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

我不知道如何使用上面的代码我的监听器被启动 -

\n\n
public class ABCListener implements MessageListener {\n\n@Override\npublic void onMessage(Message arg0) {\n AbstractJDBCFacade fa\xc3\xa7ade = null;\n try{\n    fa\xc3\xa7ade = something;\n    throw new UserException();\n }catch(UserException ex){\n    log.error("ABC Exception " + ex);\n }\n
Run Code Online (Sandbox Code Playgroud)\n\n

配置 :

\n\n
<bean id="jmsConnectionFactory" class="org.springframework.jndi.JndiObjectFactoryBean">....\n\n<bean id="jmsQueue" class="org.springframework.jndi.JndiObjectFactoryBean">\n\n<bean id="listenerContainer" class="org.springframework.jms.listener.DefaultMessageListenerContainer102">\n
Run Code Online (Sandbox Code Playgroud)\n\n

我有 3 个问题:\n1. 如果不显式地将其放入队列,如何调用侦听器?\n2. 当 onMessage 方法抛出 …

jms objectoutputstream

0
推荐指数
1
解决办法
4256
查看次数

writeObject(Object obj)是否写入对象的整个类?

关于该方法writeObject(Object obj)ObjectOutputStream

从Javadocs:

将指定的对象写入ObjectOutputStream。写入对象的类,类的签名以及该类及其所有超类型的非瞬态和非静态字段的值。

声明是什么

对象的类别

意思?这是否意味着将.class文件写入该文件或该类的源代码或仅写入该类的名称?

java objectoutputstream

0
推荐指数
1
解决办法
38
查看次数