在线存储java对象

时间:2012-05-25 19:54:04

标签: java io

这是关于堆栈溢出的第一个问题,希望你能帮助我。我已经在网上做了一些搜索,但我一直在寻找教程或答案,谈论使用BufferedReader读取文本文件或从互联网上的文件读取字节。理想情况下,我希望在我的服务器上有一个名为“http://ascistudent.com/scores.data”的文件,该文件存储我所制作的游戏玩家所做的所有Score对象。

游戏是一个简单的“块下降”游戏,你试图让3个相同的块触摸确实增加分数。当时间用完时,分数从文件加载,其分数被添加到分数列表对象的正确位置。之后,分数将再次保存到同一个文件中。

目前我在突出显示的行上遇到异常 java.io.EOFException

URL url   = new URL("http://ascistudent.com/scores.data");
InputStream is = url.openStream();
Score s;
ObjectInputStream load;
//if(is.available()==0)return;
load = new ObjectInputStream(is); //----------java.io.EOFException
while ((s = (Score)load.readObject()) != null){
    scores.add(s);
}
load.close();

我怀疑这是由于文件为空。但是当我捕获这个异常并告诉它用以下代码写入文件时(在更改得分列表之后),似乎没有任何东西被写入(异常继续发生。)

URL url  = new URL("http://ascistudent.com/scores.data");
URLConnection ucon = url.openConnection();
ucon.setDoInput(true);
ucon.setDoOutput(true);
os = ucon.getOutputStream();
ObjectOutputStream save = new ObjectOutputStream(os);
for(Score s:scores){
    save.writeObject(s);    
}
save.close();

我做错了什么?有人能指出我正确的方向吗?

非常感谢, 路加

1 个答案:

答案 0 :(得分:1)

除非该连接是可写的,否则您无法写入URLConnection。

我的意思是你不能直接写入URL,除非其他人接受你要发送的内容。这在HTTP中是通过POST请求完成的,该请求将客户端的数据附加到请求本身。

在服务器端,您必须接受此发布请求,获取数据并将其添加到scores.data。您无法直接写入文件,您需要在Web服务器中处理请求,例如:

http://host/scores.data

提供数据,而

http://host/uploadscores

应该是一个不同的URL,它接受POST请求,处理它并远程修改score.data