I have a stream class below that reads a file from a URL and then saves the result in a public static variable, so it can be accessed from other classes. Is it better to achieve this?
thank
public class ReadContent implements Runnable{
private HttpConnection connection;
private InputStream inputStream;
private String url;
public ReadContent(String url){
this.url = url;
}
public void run() {
readContentURL();
}
private void readContentURL() {
try {
connection = (HttpConnection)Connector.open(url);
connection.setRequestMethod(HttpConnection.GET);
connection.setRequestProperty("Connection", "close");
inputStream = connection.openDataInputStream();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
int c ;
while (true) {
c = inputStream.read();
if (c == -1)
break;
baos.write(c);
}
SavedJSON.result = new JSONObject(new String(baos.toByteArray()));
}
catch(Exception e){
e.printStackTrace();
}
}
}
Here is my suggested solution -
public class MyFuture{
private final Object lock = new Object();
private JSONObject value;
public void set(JSONObject t){
value = t;
synchronized(lock){
value = t;
lock.notifyAll();
}
}
public JSONObject get(){
synchronized(lock){
while(value == null)
try {
lock.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
return value;
}
}
}
public class SavedJSON {
public static MyFuture result;
}
public class ReadContent implements Runnable{
private HttpConnection connection;
private InputStream inputStream;
private String url;
public ReadContent(String url){
this.url = url;
}
public void run() {
readContentURL();
}
private void readContentURL() {
try {
int len = 0;
connection = (HttpConnection)Connector.open(url);
connection.setRequestMethod(HttpConnection.GET);
inputStream = connection.openDataInputStream();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
int c ;
while (true) {
c = inputStream.read();
if (c == -1)
break;
++len;
baos.write(c);
}
SavedJSON.result.set(new JSONObject(new String(baos.toByteArray(), 0, len, "utf-8")));
}
catch(Exception e){
e.printStackTrace();
}
}
}
source
share