标签: objectoutputstream

附加到ObjectOutputStream

是不是可以附加到ObjectOutputStream

我试图附加到对象列表.以下代码段是一个在作业完成时调用的函数.

FileOutputStream fos = new FileOutputStream
           (preferences.getAppDataLocation() + "history" , true);
ObjectOutputStream out = new ObjectOutputStream(fos);

out.writeObject( new Stuff(stuff) );
out.close();
Run Code Online (Sandbox Code Playgroud)

但是当我尝试阅读它时,我只得到文件中的第一个.然后我明白了java.io.StreamCorruptedException.

阅读我正在使用

FileInputStream fis = new FileInputStream
        ( preferences.getAppDataLocation() + "history");
ObjectInputStream in = new ObjectInputStream(fis);    

try{
    while(true)
        history.add((Stuff) in.readObject());
}catch( Exception e ) { 
    System.out.println( e.toString() );
}
Run Code Online (Sandbox Code Playgroud)

我不知道会有多少个物品存在,所以我在读书时没有例外.从谷歌所说的这是不可能的.我想知道是否有人知道方法?

java serialization append objectoutputstream objectinputstream

55
推荐指数
4
解决办法
6万
查看次数

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

为什么我只能用ObjectInputStream一次读取1024个字节?

我编写了以下代码,将4000字节的0写入文件test.txt.然后,我一次以1000字节的块读取相同的文件.

FileOutputStream output = new FileOutputStream("test.txt");
ObjectOutputStream stream = new ObjectOutputStream(output);

byte[] bytes = new byte[4000];

stream.write(bytes);
stream.close();

FileInputStream input = new FileInputStream("test.txt");
ObjectInputStream s = new ObjectInputStream(input);


byte[] buffer = new byte[1000];
int read = s.read(buffer);

while (read > 0) {
    System.out.println("Read " + read);
    read = s.read(buffer);
}

s.close();
Run Code Online (Sandbox Code Playgroud)

我期望发生的是四次读取1000个字节.

Read 1000
Read 1000
Read 1000
Read 1000
Run Code Online (Sandbox Code Playgroud)

然而,实际发生的事情是,我似乎每1024字节"暂停"(因为缺少一个更好的词).

Read 1000
Read 24
Read 1000
Read 24
Read 1000
Read 24
Read 928
Run Code Online (Sandbox Code Playgroud)

如果我尝试读取超过1024个字节,那么我的上限为1024字节.如果我尝试读取少于1024个字节,我仍然需要暂停1024字节标记.

在输出文件的检查test.txt …

java objectoutputstream objectinputstream

24
推荐指数
2
解决办法
2288
查看次数

在ObjectOutputStream上发送相同但已修改的对象

我有以下代码,显示我的错误或误解.

我发送了相同的列表,但修改了ObjectOutputStream.一次为[0],另一次为[1].但是当我读到它时,我得到[0]两次.我认为这是因为我发送的是同一个对象而ObjectOutputStream必须以某种方式缓存它们.

这是应该的工作,还是应该提交错误?

import java.io.*;
import java.net.*;
import java.util.*;

public class OOS {

    public static void main(String[] args) throws Exception {
        Thread t1 = new Thread(new Runnable() {
            public void run() {
                try {
                    ServerSocket ss = new ServerSocket(12344);
                    Socket s= ss.accept();

                    ObjectOutputStream oos = new ObjectOutputStream(s.getOutputStream());
                    List same = new ArrayList();
                    same.add(0);
                    oos.writeObject(same);
                    same.clear();
                    same.add(1);
                    oos.writeObject(same);

                } catch(Exception e) {
                    e.printStackTrace();
                }
            }
        });
        t1.start();

        Socket s = new Socket("localhost", 12344);
        ObjectInputStream ois = new ObjectInputStream(s.getInputStream());

        // outputs [0] …

java io objectoutputstream

20
推荐指数
2
解决办法
4277
查看次数

使用带有套接字的Javas对象流的性能问题

我正在尝试使用Java中的套接字和对象流来进行本地IPC但是我看到性能不佳.

我正在测试通过ObjectOutputStream发送对象的ping时间,以通过Socket上的ObjectInputStream接收回复.

这是请求者:

public SocketTest(){

    int iterations = 100;
    try {
        Socket socket = new Socket("localhost", 1212);

        ObjectInputStream objectInputStream = new ObjectInputStream(socket.getInputStream()); 
        ObjectOutputStream objectOutputStream = new ObjectOutputStream(socket.getOutputStream()); 

        double start = System.currentTimeMillis();
        for (int i = 0; i < iterations; ++i) {

            Request request = new Request();
            objectOutputStream.writeObject(request);

            Response response = (Response)objectInputStream.readObject();
        }
        double finish = System.currentTimeMillis();
        System.out.println("Per ping: " + (finish - start) / iterations );

    } catch (Exception e) {
        e.printStackTrace();
    }
}
Run Code Online (Sandbox Code Playgroud)

这是响应者:

public ServerSocketTest(){

    try {

        ServerSocket …
Run Code Online (Sandbox Code Playgroud)

java sockets performance objectoutputstream objectinputstream

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

java.io.StreamCorruptedException:类型代码无效:00

所以基本上我正在写一个客户端 - 服务器多人游戏.我有一个SeverCommunicationThread,如果他收到RequestForGame就会创建一个gameThread来创建gameThread.当我发送一个RequestForGame异常时抛出java.io.StreamCorruptedException:无效的类型代码:00我假设它是因为两个线程都试图读取相同的ObjectInputStream,我对它是如何工作的我没有太多了解,我只知道如何使用它.你能帮我理解问题是什么以及如何解决?谢谢 :)

public class ServerCommunicationThread extends Thread{
private Socket connectionSocket;
private ObjectInputStream inFromClient;
private ObjectOutputStream outToClient;
private String nickname;
private ServerModelManager model;


public ServerCommunicationThread(Socket connectionSocket,
        ServerModelManager model) throws IOException {
    this.connectionSocket = connectionSocket;
    inFromClient = new ObjectInputStream(connectionSocket.getInputStream());
    outToClient = new ObjectOutputStream(connectionSocket.getOutputStream());
    this.model = model;
    start();

}

public void run() {
    try {
        String nickname = (String) inFromClient.readObject();
        if (model.exists(nickname)){
            System.out.println(nickname + " already exists");
            outToClient.writeObject(new MessageForClient("Please choose another nickname"));
        }
        else
        {
            System.out.println(nickname + " connected, adding to …
Run Code Online (Sandbox Code Playgroud)

java sockets multithreading objectoutputstream

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

为什么选择ObjectOutputStream.writeObject(Object o); 但不是ObjectOutputStream.writeObject(Serializable o)

在Java中,我们使用序列化的writeObject(Object obj)方法.ObjectOutputStreamObject

但是因为该方法只接受实现java.io.Serializable接口的对象(或者它会抛出NotSerializableException),为什么它仍然使用Object参数而不是SerializablewriteObject(Serializable o)

有任何设计考虑因素吗?

java serialization objectoutputstream marker-interfaces

10
推荐指数
0
解决办法
184
查看次数

如何将多个对象写入可序列化文件并在再次使用该程序时读取它们?

我想为我的项目维护一个Bank用户的数据库.我能够将用户数保存在一个可序列化文件中.但是当我尝试将用户保存到数据库时,它只将最新的一个添加到数据库中.

下面是写入对象的代码的潜行高峰:

if(e.getSource()==submit) {
            if(uFName != null && uLName != null && uInitialDeposit !=0) {
                if(uAccountType=="Savings") {
                    Random randomGenerator = new Random();
                    //Gets the number of users from file if file exists
                    File f = new File(fileNameAdmin);
                    if(f.exists() && !f.isDirectory()) {
                        admin=db.readFromAdminDatabase();
                    }
                    u[admin.numberOfUsers]= new User();
                    u[admin.numberOfUsers].fName=uFName;
                    u[admin.numberOfUsers].lName=uLName;
                    u[admin.numberOfUsers].initalDeposit=uInitialDeposit;
                    u[admin.numberOfUsers].interestRate=uInterestRate;
                    u[admin.numberOfUsers].accountType="Saving";
                    u[admin.numberOfUsers].accountNumber=690000+admin.numberOfSavingsAccount;

                    //Generates a 4 digit random number which will be used as ATM pin
                    u[admin.numberOfUsers].atmPin=randomGenerator.nextInt(9999-1000)+1000;

                    //A savings account will be created 
                    sa[admin.numberOfSavingsAccount]=new SavingsAccount(u[admin.numberOfUsers].accountNumber,u[admin.numberOfUsers].fName,u[admin.numberOfUsers].lName,
                            u[admin.numberOfUsers].initalDeposit,
                            u[admin.numberOfUsers].interestRate);
                    u[admin.numberOfUsers].sa=sa[admin.numberOfSavingsAccount];
                    System.out.println(u[admin.numberOfUsers].sa.balance);
                    JOptionPane.showMessageDialog(submit,"Congratulations! You …
Run Code Online (Sandbox Code Playgroud)

java serialization objectoutputstream objectinputstream deserialization

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

JSONObject不可序列化?

我正在尝试序列化JSONObjects的ArrayList.但我得到错误:

05-07 01:04:24.130: WARN/System.err(913): java.io.NotSerializableException: org.json.JSONObject
05-07 01:04:24.130: WARN/System.err(913):     at java.io.ObjectOutputStream.writeNewObject(ObjectOutputStream.java:1535)
05-07 01:04:24.130: WARN/System.err(913):     at java.io.ObjectOutputStream.writeObjectInternal(ObjectOutputStream.java:1847)
05-07 01:04:24.130: WARN/System.err(913):     at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1689)
05-07 01:04:24.130: WARN/System.err(913):     at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1653)
05-07 01:04:24.130: WARN/System.err(913):     at java.util.ArrayList.writeObject(ArrayList.java:651)
05-07 01:04:24.130: WARN/System.err(913):     at java.lang.reflect.Method.invokeNative(Native Method)
05-07 01:04:24.130: WARN/System.err(913):     at java.lang.reflect.Method.invoke(Method.java:507)
05-07 01:04:24.130: WARN/System.err(913):     at java.io.ObjectOutputStream.writeHierarchy(ObjectOutputStream.java:1219)
05-07 01:04:24.130: WARN/System.err(913):     at java.io.ObjectOutputStream.writeNewObject(ObjectOutputStream.java:1575)
05-07 01:04:24.130: WARN/System.err(913):     at java.io.ObjectOutputStream.writeObjectInternal(ObjectOutputStream.java:1847)
05-07 01:04:24.130: WARN/System.err(913):     at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1689)
05-07 01:04:24.130: WARN/System.err(913):     at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1653)
05-07 01:04:24.130: WARN/System.err(913):     at org.stocktwits.activity.AddStocksActivity.serializeQuotes(AddStocksActivity.java:183)
05-07 01:04:24.130: WARN/System.err(913):     at org.stocktwits.activity.AddStocksActivity.access$9(AddStocksActivity.java:178)
05-07 01:04:24.130: WARN/System.err(913): …
Run Code Online (Sandbox Code Playgroud)

java serialization android json objectoutputstream

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

从对象创建对象输出流

我想创建ObjectOutputStream,但我不想将对象保存在文件中,那么如何做到这一点?所有教程(我发现)只说文件方式:

        FileOutputStream fos = new FileOutputStream("t.tmp");
        ObjectOutputStream oos = new ObjectOutputStream(fos);
        oos.writeObject(new Date());
        oos.close();
Run Code Online (Sandbox Code Playgroud)

我想将对象存储到数据库中,因此我需要在setBinaryStream()类中指定方法中的流PreparedStatement.

谢谢回答...

java database jdbc objectoutputstream

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