ObjectInputStream直接从URL读取.dat文件

时间:2015-05-05 22:26:46

标签: java url objectinputstream

我是Java和英语的新手。

我在使用ObjectOutputStream编写的URL中有.dat文件。

如何直接从网址阅读,而无需将文件保存到我的计算机上?

文件中写的第一件事就是一个数字,其余的是文字。我得到了号码,我需要得到其余的。该文件中应该还有四行,就像在任务中说的那样(这里太无关紧要了)。

我有这个代码,它给了我一个数字= 4

ObjectInputStream input2 = new ObjectInputStream(
            new URL("http://www.ut.ee/~marinai/sulearvutid.dat").openConnection().getInputStream());
    int number=input2.readInt();
    System.out.println(number); 
    // prints 4

现在看来我已经解决了这个问题,非常感谢Paul和EJP。我需要的是

    URL url = new URL("http://www.ut.ee/~marinai/sulearvutid.dat");
    ObjectInputStream input2 = new ObjectInputStream(
            url.openConnection().getInputStream());

    int number=input2.readInt();
    System.out.println(number); //prints 4

    byte[] buffer = new byte[1024];
    int bufPos;
    InputStream is = url.openConnection().getInputStream();

    for(int i=0; i<number; i++){
        String b = input2.readObject().toString();
        System.out.println(b);
    }

2 个答案:

答案 0 :(得分:0)

ObjectInputStream应该通过Object阅读readObject()。你也可以从流中读取整数,但我没有看到任何用途 - 至少不是为了你的目的。

直接方式:

URL url;//init with your url
byte[] buffer = new byte[1024];
int bufPos;
InputStream is = url.openConnection().getInputStream();
StringBuilder builder = new StringBuilder("");

while((bufPos = is.read(buffer)) != -1)
    builder.append(new String(buffer , 0 , bufPos));

is.close();

return builder.toString();

或者,如果你想按行阅读:

URL url;//init with your url
BufferedReader br = new BufferedReader(url.openConnection().getInputStream());
StringBuilder builder = new StringBuilder("");
String line;

while((line = br.readLine()) != null)
    builder.append(line);

is.close();

return builder.toString();

答案 1 :(得分:0)

当然它扔了NullPointerException. 尝试初始化字节数组。

byte[] buf = new byte[1024]; // or whatever length you're expecting to read

并且不要使用available()作为流结束的测试。见Javadoc。这不是它的用途。

我在这里看不到需要ObjectInputStream.

的任何内容