java - ByteArrayOutputStream 到字符串数组

标签 java string bytearrayoutputstream

我正在编写一个应用程序,它有一个方法可以从我的服务器下载文本文件。该文本文件将包含约 1,000 个代理 IP。下载每 10 分钟进行一次。我需要找到最有效的方法来做到这一点。

目前,我在名为 Connection 的类中有一个方法,它将返回我想要检索的任何内容的字节。因此,如果我使用这种方法连接到服务器以获取文本文件,我将以字节为单位返回它。我的另一种方法将从这些字节创建一个非常长的字符串。之后,我使用 System.LineSeparator 将长字符串拆分为数组。这是代码:

 public static void fetchProxies(String url) {
    Connection c = new Connection();
    List<Proxy> tempProxy = new ArrayList<Proxy>();
    ByteArrayOutputStream baos = 
            c.requestBytes(url);  
    String line = new String(baos.toByteArray()); 

    String[] split = line.split(System.lineSeparator());
    //more code to come but the above works fine.

}

这目前有效,但我知道这不是最有效的方法。我

我的问题
不是将字节转换为非常长的字符串,而是将字节转换为 IP 的最有效方法是什么,这样我就可以将每个单独的 IP 添加到数组列表中,然后返回充满 IP 的数组列表?

最佳答案

最有效、最合乎逻辑的方法是创建一个 BufferedReader,包装一个 InputStreamReader,包装 URL 连接的 InputStream。您可以在 BufferedReader 上使用 readLine() 直到它返回 null,并将读取的每一行附加到 IP 地址列表中:

List<String> ipList = new ArrayList<>();
try (BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream(), theAppropriateEncoding))) {
    String line;
    while ((line = reader.readLine()) != null) {
        ipList.add(line);
    }
}

请注意,尽管如此,这可能不会对该方法的性能产生太大影响,因为大部分时间都花在等待来自远程主机的 fof 字节上,这比在中构建和拆分字符串要慢得多内存。

关于java - ByteArrayOutputStream 到字符串数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23927192/

相关文章:

android - 如何在 Android 应用程序中播放来自 Amazon S3 的视频?

java - 将 HTML 资源保存在字节数组中

java - ConcurrentHashMap 及其操作

java - 如何管理 Java 库的内部配置设置?

将字符串转换为 double 并返回字符串

java - 用句点(.)分割的字符串表现出不同的行为

java - 在 Java 中使用 Double 值序列化和反序列化数据

java - JMS 容错异步发布者

java - 检查两个数组是否按某种顺序具有相同的元素

php - 将一段拆分为 160 个字符的文本消息