【问题标题】:Exception in thread "main" java.io.StreamCorruptedException: invalid stream header : 7371007E线程“主”java.io.StreamCorruptedException 中的异常:流标头无效:7371007E
【发布时间】:2017-04-24 03:17:43
【问题描述】:

我正在开发一个用于 FTP 传输实现的程序,当我尝试将服务器中的文件列表从服务器发送到客户端时,它第一次工作正常,但如果我发送命令,它会抛出以下错误再次列出文件。

Exception in thread "main" `java.io.StreamCorruptedException`: invalid stream header: 7371007E
at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:808                                                                                        )
at java.io.ObjectInputStream.<init>(ObjectInputStream.java:301)
at transferfileClient.ListFiles(ListClient.java:142)
at transferfileClient.displayMenu(ListClient.java:206)
at ListClient.main(ListClient.java:15) 

这是我的服务器端代码:

public void Listfiles() throws Exception
{
    ArrayList<String> MyList = new ArrayList<String>();
    File folder = new File("//home//cci100//CN");
    File[] listOfFiles = folder.listFiles();
    String NameOfFiles;
    String temp;
    int ch;
    for (int i = 0; i < listOfFiles.length; i++) { 
        if(listOfFiles[i].isFile()){
            MyList.add(listOfFiles[i].getName());
        }     
    }       
    try{
        objectOutput.writeObject(MyList);
    }
    catch (IOException e) 
    {
        e.printStackTrace();
    }
}

这是我的客户端代码:

@SuppressWarnings("unchecked")
public void ListFiles() throws Exception{
    ArrayList<String> MyListc = new ArrayList<String>();
    File f=new File("//home//cci100//CN");

    FileOutputStream fout=new FileOutputStream(f);
    objectInput = new ObjectInputStream(ClientSoc.getInputStream());
    try {
        Object object = objectInput.readObject();
        MyListc =  (ArrayList<String>) object;
        int s=MyListc.size();
        for (int i = 0; i < MyListc.size(); i++) {
            System.out.println(MyListc.get(i));
        }
    }
    catch (ClassNotFoundException e){
        e.printStackTrace(); 
    }
}

【问题讨论】:

  • 我修正了你疯狂的格式。不要那样做。请使用一致且正确的格式和缩进样式。否则难以辨认。 socket.io 与此完全无关。不要乱加标签。
  • 对不起,我正在学习。
  • 这不仅是为了您自己的利益,也是为了我们的利益,不仅仅是在此处发布,而是在编写然后阅读您自己的代码时。您将无法理解格式不正确的代码,或者尝试理解它需要额外的浪费精力。

标签: java sockets serialization tcp


【解决方案1】:

您需要在套接字的整个生命周期内使用相同的ObjectInputStreamObjectOutputStream

【讨论】:

    猜你喜欢
    • 2011-02-25
    • 2017-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多