【问题标题】:How to read url byte by byte?如何逐字节读取url?
【发布时间】:2014-05-02 13:22:22
【问题描述】:

嗨,我正在尝试读取一个 url,我正在获取一个字符串,我正在控制台上打印该字符串,但我想逐字节读取该 url,但我不知道如何读取

这是我的 ReadTextFromURL

import java.io.BufferedReader;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;

public class ReadTextFromURL {
    public static void main(String[] args) {
        try {

            URL url = new URL("http://122.160.81.37:8080/mandim/MarketWise?m=agra");
            ByteArrayOutputStream bais = new ByteArrayOutputStream();
            BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()));
            String line;
            int lin;
            while ((lin = in.read()) != -1) {
                System.out.println(lin);
            }
            in.close();
        } catch (MalformedURLException e) {
            System.out.println("Malformed URL: " + e.getMessage());
        }catch (IOException e) {
            System.out.println("I/O Error: " + e.getMessage());
        }
    }
}

想要的输出

धान~1325|चावल~2050|ज्वर~920|जौ~810|मकई~1280|गेहूँ~1420|जो~1050|बेजर~-|जय~800

获取输出

2343
2366
2344
126
49
51
50
53
124
2330
2366
2357
2354
126
50

我怎样才能得到我想要的输出?

【问题讨论】:

  • 您的预期输出是什么,您当前的输出是什么?
  • 预期输出是逐字节读取字符串
  • 您是否尝试过in.read(),它返回int (byte)?
  • 我使用了 in.read() 然后给出了可比较类型 int 的错误消息:
  • 嗯,-1 是您用尽输入后返回的结果。不是nullint 值永远不能是 null

标签: java url


【解决方案1】:

您可以将 URL 作为 InputStream 打开并使用面向字节的方法指定大小等于 1 的数组。查看此页面:http://docs.oracle.com/javase/7/docs/api/java/io/InputStream.html#read(byte[],%20int,%20int) 顺便说一句,在处理流时使用 try-with-resource 构造结构:

byte oneSizeByteArray = new byte[1];
try (InputStream is = url.openStream()) {
    is.read(oneSizeByteArray,0,1)
} catch (IOException ex) {
}

【讨论】:

    【解决方案2】:

    如果你想读取字节,不要使用Readers。 Reader 读取 chars(不是 bytes)。如果您需要阅读 bytes,请使用低级输入输出类 (InputStream/OutputStream)。

    【讨论】:

    • 你能不能请一些明显不稳定的东西
    • 在 Java 中,您有两种输入/输出对象:一种让您读取字节,一种让您读取字符。在那种语言中,字符不是字节,它们是字节的翻译(这是为了支持不同的语言编码)。所以,如果你想从文件中读取字节,那么你应该使用正确的类:InputStream。您有不同的 InputStreams,它们仅在读取源上有所不同,但基本上您只能从这些源中读取字节。一旦你得到一个 URL,你就可以得到一个 InputStream 来从 URL 所代表的数据源中读取字节。
    • 现在,如果您想从 URL 所代表的数据源中读取字节,请获取 InputStream is = url.getInputStream();,然后使用 int i = is.read(); 逐个读取字节(例如),如果您在 EOF 上,那么我会等于 -1,如果不使用byte b = (byte)i; 将整数转换为字节,那么您将获得来自 URL 的字节。
    猜你喜欢
    • 2020-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-27
    相关资源
    最近更新 更多