如何从internet下载一个大型json文件而不进行解析(java,okhttp3)?

如何从internet下载一个大型json文件而不进行解析(java,okhttp3)?,java,json,okhttp3,fileoutputstream,bufferedinputstream,Java,Json,Okhttp3,Fileoutputstream,Bufferedinputstream,我在从internet(20+GB)下载一个大型json文件时遇到了一个问题,特别是如何将其保存到本地磁盘。我不想解析json,只是下载它 在SO中有几个类似的问题得到了回答,但我还没有看到人们对输出有问题——我不确定我遗漏了什么 无论如何,当我执行以下代码时,它下载json并将相应的字节数组放入文件中,而不是以字符串格式保存 OkHttpClient httpClient = new OkHttpClient.Builder() .connectTimeout(

我在从internet(20+GB)下载一个大型json文件时遇到了一个问题,特别是如何将其保存到本地磁盘。我不想解析json,只是下载它

在SO中有几个类似的问题得到了回答,但我还没有看到人们对输出有问题——我不确定我遗漏了什么

无论如何,当我执行以下代码时,它下载json并将相应的字节数组放入文件中,而不是以字符串格式保存

        OkHttpClient httpClient = new OkHttpClient.Builder()
        .connectTimeout(CONNECT_TIMEOUT, TimeUnit.MINUTES)
        .readTimeout(CONNECT_TIMEOUT, TimeUnit.MINUTES)
        .writeTimeout(CONNECT_TIMEOUT, TimeUnit.MINUTES)
        .build();

    Request request = new Request.Builder()
        .url(path)
        .header("User-Agent", ClientConstants.USER_AGENT)
        .addHeader("Accept-Encoding", "gzip, deflate, sdch, br")
        .addHeader("Content-Type", "application/json")
        .build();

    Response response = httpClient.newCall(request).execute();

    if (!response.isSuccessful()) {
        log.error("failed download for url : {0}, with status code {1}", url, response.code());
        if (response.body() != null) {
            response.body().close();
        }
        throw new IOException("failed download for url=" + url);
    }
    else {
        try(BufferedInputStream inputStream = new BufferedInputStream(response.body().byteStream())){
            byte[] readBuffer = new byte[10000];
            FileOutputStream outputStream = new FileOutputStream(this.downloadFilePath);
            int bytesRead;
            while ((bytesRead = inputStream.read(readBuffer, 0, 10000)) != -1) {
                outputStream.write(readBuffer, 0, bytesRead);
                outputStream.flush();
            }
            outputStream.close();
        } catch (IOException e) {
            log.error("failed download for url=" + url, e);
            throw e;
        }
    }

代码是有效的。我只是按照Victor Gubin的建议删除了不正确的标题。

那么问题出在哪里?下载后是否无法读取/解析json文件?我假设这是因为以下标题
Accept Encoding”,“gzip,deflate,sdch,br“
此文件已压缩。因此,如果您将输入流包装到其中,则应该自动将其解压缩。但是先用一些较小的测试文件检查一下。是的,就是这样。当我需要那个标题时,我实际上是在使用另一个提要来下载一个zip。但是当我下载json时忘了把它拿出来。谢谢你抓住它!