标签: objectinputstream

无法通过Java中的ObjectInputStream发送Object

我正在编写一个使用对象输出和输入流的应用程序.但是我有一个问题,因为我无法正确发送我的对象.我将它写入流,并且服务器给我一个类未找到异常,即使客户端和服务器都具有完全相同的此类副本(唯一的区别是包名称)具有相同的序列ID.这是我的班级:

import java.io.Serializable;

public class Message implements Serializable {

/**
 * 
 */
private static final long serialVersionUID = 1L;
private String username = null;
private String hashedPassword = null;
private Integer code = null;
private String from = null;
private String to = null;
private Object data = null;

public Message() {

}

public Message(Integer code) {
    this.code = code;
}

public Message(Integer code, Object data) {
    this.code = code;
    this.data = data;
}

public Message(String username, String hashedPassword, Integer …
Run Code Online (Sandbox Code Playgroud)

java objectoutputstream objectinputstream eofexception

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

程序在Java中初始化对象输入流时暂停

在运行调试器时,程序暂停从服务器主输入输出流初始化对象流.以下是代码:

 public TFileReader(Client cli)throws Exception{
    this.cli = cli;
    fileSock = new Socket(cli.ServerIp(), cli.FilePort());
    fobjIn = new ObjectInputStream(fileSock.getInputStream());
    fobjOut = new ObjectOutputStream(fileSock.getOutputStream());
    fobjOut.flush();

}

 @Override
public void run(){

    try{
            System.out.println("file reader thread online");

            fobjOut.writeObject(cli.Name());
            fobjOut.flush();
           String per = (String) fobjIn.readObject();
            System.out.println(per+"video filing...");
            if(!per.equals("OKF"))
            {
                    throw new Exception("Error In retriving video.");
            }
Run Code Online (Sandbox Code Playgroud)

虽然它从断点传递但没有击中断点,它会暂停fobjIn并且不会执行.fobjOutfobjInfobjIn

java sockets stream objectinputstream

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

ObjectOutputStream方法:writeBytes(String str)vs writeUTF(String s);

这两者之间的主要区别是什么?

他们俩都是为了写字符串.

public void writeUTF(String str)
              throws IOException

Primitive data write of this String in modified UTF-8 format.
Run Code Online (Sandbox Code Playgroud)

VS

public void writeBytes(String str)
                throws IOException

Writes a String as a sequence of bytes.
Run Code Online (Sandbox Code Playgroud)

我什么时候应该使用一个而不是另一个?

java io objectinputstream

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

getInputStream块?

使用输入/输出流在我的客户端和服务器之间传递对象.我可以用我的服务器发送和接收对象,现在我想要客户端,现在只能发送.所以我给了我的客户一个ObjectInputStream.然而,当我初学它时,它会阻止!一直在寻找答案,但没有解决方案.

请帮忙!

public GameConnection(String strPort, TextArea chat)
    {
        this.port = Integer.parseInt(strPort);
        System.out.println("GameConnection::Constructor(): Connecting on port " + port);
        this.chat = chat;


        connect = new Connection();
        sendObject();
    }
    public void sendObject()
    {
        try
        {  
            obj_stream.writeObject(new String("GameServer received a message!"));  
        }
        catch(Exception e){System.out.println("GameConnection::sendObject(): " + e);}  
    }  

    protected class Connection extends Thread
    {
        private boolean alive = true;

        public Connection()
        {
            try
            {
                socket = new Socket(host, port);
                System.out.println("Connected to GAMESERVER" + host + " on port + " + port);
                obj_stream …
Run Code Online (Sandbox Code Playgroud)

java multithreading objectinputstream

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

通过 ObjectInputStream 和瞬态字段进行序列化

这个问题是关于 ObjectInputStream 以及它如何构建声明为瞬态的字段。考虑 ObjectInputStream 的一个简单用例

FileInputStream fis = new FileInputStream("t.tmp");
ObjectInputStream ois = new ObjectInputStream(fis);
SomeClass sc = (SomeClass) ois.readObject();
Run Code Online (Sandbox Code Playgroud)

SomeClass 在哪里

class SomeClass {
   int x;
   transient OtherClass y;
}

class OtherClass {
   int z;
}
Run Code Online (Sandbox Code Playgroud)

ois.readObject 之后 sc.y 的值是多少?

我要求澄清我在docs.oracle.com上读到的内容,其中指出

“反序列化过程会忽略声明为瞬态或静态的字段。对其他对象的引用会导致根据需要从流中读取这些对象。”

忽略瞬态场是什么意思?如果它们是瞬态的(即未序列化 - 我如何理解它......),如何从流中读取它们

马蒂亚斯

java serialization transient objectinputstream

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

如何将图像 url 提供给 createImageInputStream 方法

我有一个图片网址,例如

String url = "http://XXXXXXX/img_High-Octane-Sauce-Company-JP5-400x1024.jpg";
Run Code Online (Sandbox Code Playgroud)

我需要将其作为该方法的输入,

ImageInputStream in = ImageIO.createImageInputStream( urlInputHere );
Run Code Online (Sandbox Code Playgroud)

所以我可以在不使用图像缓冲区的情况下读取图像的宽度和高度。谁能告诉我如何做到这一点?

这是我阅读图像的方式

ImageInputStream in = ImageIO.createImageInputStream(resourceFile);
try {
    final Iterator<ImageReader> readers = ImageIO.getImageReaders(in);
    if (readers.hasNext()) {
        ImageReader reader = readers.next();
        try {
            reader.setInput(in);
            return new Dimension(reader.getWidth(0), reader.getHeight(0));
        } finally {
            reader.dispose();
        }
    }
} finally {
    if (in != null) in.close();
}
Run Code Online (Sandbox Code Playgroud)

PS 取自:Java/ImageIO 在不读取整个文件的情况下获取图像尺寸?

java image objectinputstream

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

java.io.StreamCorruptedException:无效的流标头:48656C6C

我正在使用 netty 客户端服务器进行通信。消息作为字节数组成功接收。当我将字节数组转换为 ObjectInputStream 时,出现异常

java.io.StreamCorruptedException: invalid stream header: 48656C6C
at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:804)
at java.io.ObjectInputStream.<init>(ObjectInputStream.java:299)
at nettyClientServer2.PongHandler.messageReceived(PongHandler.java:99)
at org.jboss.netty.channel.SimpleChannelHandler.handleUpstream(SimpleChannelHandler.java:88)
at org.jboss.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:564)
at org.jboss.netty.channel.DefaultChannelPipeline$DefaultChannelHandlerContext.sendUpstream(DefaultChannelPipeline.java:791)
at org.jboss.netty.handler.execution.ChannelUpstreamEventRunnable.doRun(ChannelUpstreamEventRunnable.java:43)
at org.jboss.netty.handler.execution.ChannelEventRunnable.run(ChannelEventRunnable.java:67)
at org.jboss.netty.handler.execution.OrderedMemoryAwareThreadPoolExecutor$ChildExecutor.run(OrderedMemoryAwareThreadPoolExecutor.java:314)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:745)
Run Code Online (Sandbox Code Playgroud)

这就是我如何转换..

byte[] ppBytes=pptmp.status;
ObjectInputStream input = null;
input = new ObjectInputStream(new ByteArrayInputStream(ppBytes));
Run Code Online (Sandbox Code Playgroud)

java bytearray objectinputstream netty

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

Java Object输入流readObject();

我已将对象保存到数组列表并将文件保存为.dat,但是当我想要读取对象时,它只显示null而不是值.

班级

public class Person implements Serializable {
  public static String Name;
  public static String Contact;

  public Person(String Name, String Contact) {
    this.Name = Name;
    this.Contact = Contact;
  }

  public String getName() {
    return Name;
  }

  public String getContact() {
    return Contact;
  }
}
Run Code Online (Sandbox Code Playgroud)

代码

FileInputStream fis;
try {
  fis = new FileInputStream("Person.dat");
  ObjectInputStream ois = new ObjectInputStream(fis);
  ArrayList<Person> per = (ArrayList<Person>) ois.readObject();
  ois.close();

  per.get(0);
  Person pe = per.get(0);
  System.out.println(pe.getName());
} catch (FileNotFoundException e1) {
  // TODO Auto-generated catch block …
Run Code Online (Sandbox Code Playgroud)

java serialization objectinputstream

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

ByteArrayInputStream 到 ObjectInputStream 消失了

有不明白的地方,请大家帮忙。

System.out.println("\n" + Arrays.toString(buffer) + "\n");
System.out.println("buffer.length = " + buffer.length + "\nnew ByteArrayInputStream(buffer).available() is: " + new ByteArrayInputStream(buffer).available());
ObjectInput input = new ObjectInputStream(new ByteArrayInputStream(buffer));
System.out.println("input.available(): " + input.available());
Run Code Online (Sandbox Code Playgroud)

它的输出如下:

[-84, -19, 0, 5]

buffer.length = 4
new ByteArrayInputStream(buffer).available() is: 4
input.available(): 0
Run Code Online (Sandbox Code Playgroud)

我很困惑为什么一个包含 4 个有效字节的字节数组在放入 ObjectInputStream 后变为零。

我尝试过的事情:

  1. 最初,我怀疑我的字节数组是空的,但正如你看到的,我打印出来,它的长度是 4。
  2. 然后我认为我的字节可能无效,所以我打印了每个字节,如您所见,这四个字节都是有效的。

所以,我不知道为什么会发生这种情况。

请帮忙,非常感谢!

java io objectinputstream bytearrayinputstream

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

使用Java中的ObjectInputStream从文件中检索String数组?

我的程序基本上是每日计划者.

计划按ObjectOutputStream按月和年保存在文件中.校验

时间表按天安排在一个数组中.校验

计划由ObjectInputStream检索.这是我遇到问题的地方.

public class Calendar {
public String date;
public String[] schedule = new String[31];
Calendar(){


}

public String retrieve(int month, int day, int year) {
    date = Integer.toString(month) + "-"+ Integer.toString(year ) + ".txt";

    try {
        ObjectInputStream input = new ObjectInputStream(new 
FileInputStream(date));
        input.readObject();
        schedule = input;    
//This is where I have the error obviously schedule is a string array and 
//input is an ObjectInputStream so this wont work
        input.close();
        return schedule[day-1];

    } catch (FileNotFoundException e) {
        // …
Run Code Online (Sandbox Code Playgroud)

java arrays string exception objectinputstream

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