Рубрики
Без рубрики

Преобразовать входной поток для буферизованного чтения на Java

В Java мы можем использовать “InputStreamReader” для преобразования `входного потока” в “Читатель” или “Буферизованный читатель”.

Примечание BufferedReader считывает символы; в то время как Входной поток представляет собой поток байтов.

BufferedReader не может прочитать Входной поток напрямую; Итак, нам нужно использовать адаптер, такой как InputStreamReader для преобразования байтов в формат символов. Например:

  // BufferedReader -> InputStreamReader -> InputStream
  BufferedReader br = new BufferedReader(
                          new InputStreamReader(inputStream, StandardCharsets.UTF_8));

1. Считывает файл из папки ресурсов.

В этом примере файл считывается из папки ресурсов как InputStream ; и мы можем использовать BufferedReader + InputStreamReader для чтения его построчно.

package com.mkyong.io.howto;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.nio.charset.StandardCharsets;

public class InputStreamToReaderExample {

    public static void main(String[] args) throws IOException {

        // loads a file from a resources folder
        InputStream is = InputStreamToReaderExample.class
                            .getClassLoader()
                            .getResourceAsStream("file/abc.txt");

        // BufferedReader -> InputStreamReader -> InputStream

        // try-with-resources, auto close
        String line;
        try (BufferedReader br = new BufferedReader(
                      new InputStreamReader(is, StandardCharsets.UTF_8))) {

            // read line by line
            while ((line = br.readLine()) != null) {
                System.out.println(line);
            }

        }

    }
}

2. Отправьте запрос Http post на конечные точки Cloudflare.

В этом примере используется Apache HttpClient для отправки запроса POST конечным точкам Cloudflare для блокировки IP-адреса. Возвращаемое значение представляет собой строку JSON в InputStream , и мы можем использовать тот же BufferedReader + InputStreamReader для чтения потока байтов.

  
    org.apache.httpcomponents
    httpclient
    4.5.13
  
package com.mkyong.security.action;

import com.mkyong.security.util.PropertyUtils;
import org.apache.http.Header;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.message.BasicHeader;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.concurrent.TimeUnit;

public class CloudFlareBanIP {

    private static final String CF_AUTH_EMAIL = PropertyUtils.getInstance().getValue("cf_auth_email");
    private static final String CF_AUTH_TOKEN = PropertyUtils.getInstance().getValue("cf_auth_token");
    private static final String JSON_TYPE = "application/json";
    private static Header[] HTTP_HEADERS = {
            new BasicHeader("X-Auth-Email", CF_AUTH_EMAIL),
            new BasicHeader("X-Auth-Key", CF_AUTH_TOKEN),
            new BasicHeader("content-type", JSON_TYPE)
    };

    private HttpClient httpClient = HttpClientBuilder.create()
            .setConnectionTimeToLive(10, TimeUnit.SECONDS)
            .build();

    public HttpClient getHttpClient() {
        return httpClient;
    }

    public static void main(String[] args) throws IOException {

        CloudFlareBanIP obj = new CloudFlareBanIP();
        String response = obj.banIp("52.249.189.81", "bad ip");

        System.out.println(response);

    }

    public String banIp(String ip, String note) throws IOException {

        StringBuilder json = new StringBuilder();
        json.append("{");
        json.append("\"mode\":\"block\",");
        json.append("\"configuration\":" + "{\"target\":\"ip\",\"value\":\"" + ip + "\"}" + ",");
        json.append("\"notes\":\"" + note + "\"");
        json.append("}");

        StringBuilder result = new StringBuilder();

        HttpPost post = new HttpPost("https://api.cloudflare.com/client/v4/user/firewall/access_rules/rules");
        post.setHeaders(HTTP_HEADERS);
        post.setEntity(new StringEntity(json.toString()));

        // read response from the POST request
        try (BufferedReader br = new BufferedReader(
                new InputStreamReader(getHttpClient().execute(post).getEntity().getContent()))) {
            String line;
            while ((line = br.readLine()) != null) {
                result.append(line);
            }
        }

        return result.toString();

    }

}

Скачать Исходный Код

$клон git $клон git

$cd java-ввод-вывод/как это сделать

Рекомендации

Оригинал: “https://mkyong.com/java/convert-inputstream-to-bufferedreader-in-java/”