标签: objectinputstream

在java中读取对象直到文件结尾

我正在尝试编写一个程序,用户可以:1)向联系人添加人员(姓名,电话,电子邮件),2)从联系人中删除一个人,3)从联系人中读取所有人.

我这样做的方式是我要求用户选择并分别做任何事情.对于写入,我只是将一个对象写入该文件.为了删除,我想我会问用户"姓"将用作KEY(因为我正在使用TreeMap)并将删除键上的值(对象).

所以我在这里读书时遇到了问题.我试图像这样读取对象:

public void readContact()
{
  TreeMap<String, Contact> contactMap = new TreeMap<String, Contact>();
  try 
  {
    ObjectInputStream in = new ObjectInputStream(new BufferedInputStream(
                                                   new FileInputStream(file)));

    while( in.available() > 0 ) //This line does NOT read  
    {
      Contact c = (Contact)in.readObject();
      contactMap.put(c.getLastName(), c);           
    }

    for(Map.Entry contact : contactMap.entrySet() ) 
    {
      Contact con = contactMap.get( contact.getKey() );
      System.out.println( con.getLastName() + ", " + con.getFirstName() + ": " + con.getPhoneNumber() + "\t" + con.getEmail());
    }
  }
  catch(Exception e)
  {
    System.out.println("Exception caught");
  } 
}
Run Code Online (Sandbox Code Playgroud)

请不要建议做 …

java generics treemap objectinputstream eofexception

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

ObjectInputStream/ObjectOutputStream工作不对

我有类:Client,Server和Background正在使用Player类.我真的不明白为什么我的Client类使用ObjectInputStream/ ObjectOutputStream不能正常工作.

我做得不好?哪里是我的错?

package Shooter2Dv27082013;
public class Player implements Serializable{
....
public int x=10;
public int y=10;
.... }

package Shooter2Dv27082013;
public class Background extends JPanel implements ActionListener, Serializable {
public int countCollisions=0;
private int time = 20;                       // 0.02s
Timer mainTimer = new Timer(time, this);
....
Player p = new Player(); ... }
Run Code Online (Sandbox Code Playgroud)

现在Client类:

package Shooter2Dv27082013;


import javax.swing.*;
import java.net.*;
import java.io.*;

public class Client {
    public static void main(String[] ar) {
        JFrame frame = new …
Run Code Online (Sandbox Code Playgroud)

java sockets serialization objectoutputstream objectinputstream

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

我下面在 ObjectStream 中的写作和阅读出了什么问题

下面的代码将我的对象和 byte[] 写入文件,sigBytes 是我的 byte[]

ObjectOutputStream outputOS = new ObjectOutputStream(new FileOutputStream(outputFile));
    outputOS.writeInt(sigBytes.length);
    outputOS.write(sigBytes);
    outputOS.writeObject(text);
    outputOS.close();
Run Code Online (Sandbox Code Playgroud)

然后当我执行下面的代码时,我得到一个 java.io.OptionalDataException

ObjectInputStream inputIS = new ObjectInputStream(new FileInputStream(INPUT));
    int length = inputIS.readInt();
    byte[] sigBytes = new byte[length];
    inputIS.read(sigBytes, 0, length);
    String text = (String) inputIS.readObject();
Run Code Online (Sandbox Code Playgroud)

在我得到的错误下面String text = (String) inputIS.readObject()

java.io.OptionalDataException at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1305) at java.io.ObjectInputStream.readObject(ObjectInputStream.java:371) at encryption3.Encryption3.decrypt(Encryption3.java:34) at encryption3 .Encryption3.main(Encryption3.java:53)

编辑我不能让错误以最小的方式重复如下???我真的很累了..

public static void doThings() {

    try {
        File file = new File("C:/edges/input.ext");

        String text = "Hello";
        file.createNewFile();

        byte[] sigBytes = (text).getBytes();

        ObjectOutputStream …
Run Code Online (Sandbox Code Playgroud)

java byte objectoutputstream objectinputstream

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

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/ObjectInputStream的进度

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

java sockets progress objectoutputstream objectinputstream

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

ObjectInputStream抛出NotSerializableException

我正在尝试PWlist.dat文件中读取一个对象数组(称为)ObjectInputStream.该数组包含两个不同的对象,LongPWPinPW.当我尝试执行读取时,我收到此异常...

java.io.WriteAbortedException: writing aborted; java.io.NotSerializableException: PinPW
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1332)
at java.io.ObjectInputStream.readArray(ObjectInputStream.java:1666)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1322)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:350)
at Handler.fromFile(Handler.java:99)
at Window$ButtonListener.actionPerformed(Window.java:104)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2028)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2351)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
at java.awt.Component.processMouseEvent(Component.java:6375)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
at java.awt.Component.processEvent(Component.java:6140)
at java.awt.Container.processEvent(Container.java:2083)
at java.awt.Component.dispatchEventImpl(Component.java:4737)
at java.awt.Container.dispatchEventImpl(Container.java:2141)
at java.awt.Component.dispatchEvent(Component.java:4565)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4619)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4280)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4210)
at java.awt.Container.dispatchEventImpl(Container.java:2127)
at java.awt.Window.dispatchEventImpl(Window.java:2482)
at java.awt.Component.dispatchEvent(Component.java:4565)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:684)
at java.awt.EventQueue.access$000(EventQueue.java:85)
at java.awt.EventQueue$1.run(EventQueue.java:643)
at java.awt.EventQueue$1.run(EventQueue.java:641)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:98)
at …
Run Code Online (Sandbox Code Playgroud)

java objectinputstream notserializableexception

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

我应该在何时何地使用close()方法来避免ObjectInputStream中的IOException?

我正试图通过tcp从客户端程序中读取一个对象.正如您在此行中所看到的,我创建了objectInput:

ObjectInputStream objectInput = new ObjectInputStream(incoming.getInputStream());
Run Code Online (Sandbox Code Playgroud)

然后从其他程序中读取我的输入.它曾经工作正常,直到我做了一些小的改动来清理程序.个人假设我补充说

objectInput.clsoe();
Run Code Online (Sandbox Code Playgroud)

我的问题是,在读取对象后,我应该关闭objectInputStream还是保持不关闭?我应该在使用它之后立即关闭它还是在if块结束时或在程序结束时关闭它?关闭有什么影响?顺便说一句,我已经阅读了密切的文档.

这是错误:

java.io.EOFException
    at java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2280)
    at java.io.ObjectInputStream$BlockDataInputStream.readShort(ObjectInputStream.java:2749)
    at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:779)
    at java.io.ObjectInputStream.<init>(ObjectInputStream.java:279)
    at Server.ClientWorker.run(MyCollectionServer.java:116)
    at java.lang.Thread.run(Thread.java:680)
Run Code Online (Sandbox Code Playgroud)

这是我的代码:

    public static void main(String[] args) {
        ServerSocket serverSocket = null;
        try 
        {
            serverSocket = new ServerSocket(port);  
        } 
        catch (IOException e) 
                {
            e.printStackTrace();
        }
        while(true)
        {   
            ClientWorker w;
            try
            {   
                w = new ClientWorker(serverSocket.accept());
                Thread t = new Thread(w);
                t.start();
            }
            catch(IOException e)
            {
                e.printStackTrace();
                break;
            }   
        }
    }
}

class ClientWorker implements Runnable
{
.....
    private …
Run Code Online (Sandbox Code Playgroud)

java sockets networking tcp objectinputstream

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

找不到符号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
查看次数

如何正确关闭ObjectInputStream?

FileInputStream第一次使用a 并尝试Item从文件加载objects().

这是我的代码:

    try {

        FileInputStream fi = new FileInputStream(f);
        ObjectInputStream reader = new ObjectInputStream(fi);

        while (true) {
            Item i = (Item)reader.readObject();
            System.out.println(i.getName());
        }

    } catch (Exception e) {
        System.out.println(e.toString());
    }
Run Code Online (Sandbox Code Playgroud)

我已经读过这是执行它的标准方法,代码工作正常.然而,这种方式fireader永远不会关闭,因为编译器跳转到catch只要一个块EOFException被抛出.

编译器不会让我关闭fi,并readercatchfinally块.这真的是它应该如何吗?如何正确关闭输入对象?

java objectinputstream

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