Как я могу прочитать поток октетов в обычную строку / текст, используя java? - PullRequest
0 голосов
/ 13 февраля 2020

У меня есть некоторый контент, поступающий из байта [], который обозначает данные из запроса, который сохраняется в файле .txt.

try {
        while ((bytesRead = streamFromClient.read(currentRequest)) != -1) {

                LOG.info("Received request...");
                addInvoiceRequestOnly();
                streamToServer.write(currentRequest, 0, bytesRead);
                streamToServer.flush();
                dumpTrafficToFile();
            }

        } catch (IOException e) {
            LOG.severe("Could not read/write from/to the request...");
            e.getStackTrace();
        }
POST /domibus/services/...
Host: domibusbackend
Connection: close
Content-Length: 16189
Content-Type: multipart/related; type="application/soap+xml"; boundary="uuid:6b5b42a6-ea2f-4830-84c3-c799f38ca32a"; start="<root.message@cxf.apache.org>"; start-info="application/soap+xml"
Accept: */*
User-Agent: Apache-CXF/3.3.2
Cache-Control: no-cache
Pragma: no-cache
.........
Content-Type: application/octet-stream
Content-Transfer-Encoding: binary
Content-ID: <53c6399c-a6b1-4ffa-9c85-d8b7bb337f28@www.someDomain.com>
CompressionType: application/gzip
MimeType: application/xml

­†’^tÜ:–jq®Z{€Üş˝`cWłÓx˘ěxĐWé"v«8-ňBStÂá›Ë+•jnCćcv‰v2—ťř‘÷ż÷ ĺůéűI˝sJá@Vzľ¸…“ߟ¤Ž2]§yÁbů,m ĺgٱťŠ¸áĐĽ<í.ÖÚeGü®î…Č>
-b¶öG BD,[âŤţ*^lJĘ@DLŃ%Ó:°Ě¸ÉÇVťäś(ăÉÁSy¨±ă“˙řµÁ¨žńˇęÁŽ‚GyvSĄ Ąeě$EI‡*0ĎEĽ•(Ú/{ôđ:d?ćŢ6AgŽ¦ ?ý+𣔣bÁË:˛×í„EQT·
ł/0Ž!ÂŚ6öpqÚ[Q˛ä–ů'0]
ŢfĎgÓŤß7ü–ඤşÔř»?É€“}%ů†Z/€ęŃ·b÷ĂR
żŇ’!|…q· FÉ2ľÎöDÎ>ÖËY)hşk’
łÍĚäŕ„ę+
ă6ţwÇäŘöpŻŞŁ¬tµŢp&ŁK?„8îIč™U\Ä_j)Q“˝QI·čOŽ|ż/Żl±MÁŔµ¤·c{ëŇś¸űXďß%yň¤¨CŇ1ÂĎVÜÝÁwăł[Ť
ťÔ‹Ń(µ[
p]r1Żq{0Ů7ęŐGGżX"˘ćŇÇgj*TRĽĺ*Ă@@ŐÖKąĐ•ľe7­ąWöVĺ:çĂŢnHöT}ł•ť!dĂô¬ZTz'ÝS.¤öX×čÜť9Ü°™ô-Ue#xÚ–LL‡
í
‹Uĺ×Tśü«$tĚ

Может кто-нибудь скажите, как я могу преобразовать эти данные в удобочитаемые данные? В заголовке говорится, что он должен быть двоичным, но это не так, двоичные данные выглядят иначе. Я получил много читаемых данных из запроса, но последняя часть, которую вы видите, это та инопланетная вещь, которую я не знаю, как ее расшифровать ... Если кто-то может помочь мне с этим, я был бы признателен. Спасибо!

Ответы [ 2 ]

1 голос
/ 13 февраля 2020

Это предполагает сжатие: CompressionType: application/gzip

Таким образом, введите тело в java .util.zip.GZIPInputStream

0 голосов
/ 13 февраля 2020

Я предполагаю, что вы используете Servlet-API. Если вы используете какой-либо фреймворк, вам нужно изменить первый фрагмент кода, чтобы извлечь тело запроса и передать его в extract().

public void doPost(HttpServletRequest request, HttpServletResponse response) {
    InflaterInputStream is = InflaterInputStream(request.getInputStream()); 
    String readableString = extract(is);
    // do the processing
}

Затем преобразовать сжатый двоичные данные в читаемую строку

private String extract(InputStream is) throws IOException {
    StringBuffer sb = new StringBuffer();
    BufferedReader in = new BufferedReader(new InputStreamReader(is));
    String inputLine = "";
    while ((inputLine = in.readLine()) != null) {
        sb.append(inputLine);
    }
    return sb.toString();
}
...