Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Storing java objects online

Tags:

java

io

this is my first question on stack overflow, I hope you can help me. I've done a bit of searching online but I keep finding tutorials or answers that talk about reading either text files using a BufferedReader or reading bytes from files on the internet. Ideally, I'd like to have a file on my server called "http://ascistudent.com/scores.data" that stores all of the Score objects made by players of a game I have made.

The game is a simple "block-dropping" game where you try to get 3 of the same blocks touching do increase the score. When time runs out, the scores are loaded from a file, their score is added in the right position of a List of Score objects. After that the scores are saved again to the same file.

At the moment I get an exception, java.io.EOFException on the highlighted line:

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();

I suspect that this is due to the file being empty. But then when I catch this exception and tell it to write to the file anyway (after changing the Score List) with the following code, nothing appears to be written (the exception continues to happen.)

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();

What am I doing wrong? Can anyone point me in the right direction?

Thanks very much, Luke

like image 283
luke Avatar asked Dec 04 '25 07:12

luke


1 Answers

Natively you can't write to an URLConnection unless that connection is writable.

What I mean is that you cannot direcly write to an URL unless the otherside accept what you are going to send. This in HTTP is done throug a POST request that attaches data from your client to the request itself.

On the server side you'll have to accept this post request, take the data and add it tothe scores.data. You can't directly write to the file, you need to process the request in the webserver, eg:

http://host/scores.data

provides the data, while

http://host/uploadscores

should be a different URL that accepts a POST request, process it and remotely modifies score.data

like image 106
Jack Avatar answered Dec 05 '25 19:12

Jack