Я хочу сжать большой объект JSON в JavaScript и распаковать его в Java - PullRequest
0 голосов
/ 05 февраля 2019

Я хочу сжать большой объект JSON в javascript и распаковать его в java. Какой алгоритм сжатия лучше всего это поддерживает?

Продолжая то же самое, я попытался использовать gzip, столкнувшись с проблемой при этом ..

" У меня есть javascript на стороне клиента и Java Jboss Resteasy на моей стороне сервера. Я попробовал вашПодход, который не работает. Я использовал библиотеку zlib в javascript для сжатия с помощью Gzip и использовал Content Encoding в качестве gzip, а также аннотацию Gzip на стороне сервера Jboss для его автоматической распаковки. Это не работало. Также я пытался использовать InputStreamReader для распаковки вJava, это выдает ошибку «Данные не в формате Gzip». Можете ли вы помочь мне здесь, если это возможно, вы можете вставить пример кода для того же"

Код в Javascript

 zlib.gzip(JSON.stringify($scope.jsonCompressCheck),function(err, buffer) {
            if (!err) {
              console.log("USing gzip: ");
              console.log("Byte Length: "+Buffer.byteLength(buffer));
              console.log(sizeof(buffer));

             $scope.compressed = buffer;
             var buf2 = Buffer.from(JSON.stringify($scope.jsonCompressCheck));

        $http.post(ATS_URL + ATS_INSTANCE + '/rest/private/decompress/' + clientName + '/gzipdecompress', ($scope.compressed), {

            contentType: 'application/json',
            contentEncoding: 'gzip'

        }).success(function (data, status, headers) {

            console.log("Output Response :- "+data+" Headers: "+headers+"  status: "+status);

        }).error(function (reason) {

            console.log(" Error reason "+reason);
        });

Java-код здесь: конечная точка Jboss RestEasy

@POST @NoCache
@ApiOperation(value = "Decompress Given Compressed Json object Using Gzip",
                    response = ElasticSearchResults.class, position = 0)
@Path("/{client}/gzipdecompress")
public String gzipJsonDecompress(
        @ApiParam(value = "This required field should be the client name as defined in the datasources.", required = true)
        @PathParam("client") String client,
        @GZIP byte[] compressedObject) throws ATSException {
     return decompressService.gzipJsonDecompress(client,compressedObject);
}

Код реализации

 public String gzipJsonDecompress(String client,byte[] compressedObject)throws ATSException{

    validateDomain(client);

    try
    {    InputStream inputStream = new 
         ByteArrayInputStream(compressedObject);
        GZIPInputStream gzipInput = new GZIPInputStream(inputStream); //Not working here  
         ....

Ответы [ 2 ]

0 голосов
/ 05 февраля 2019
**Compress a normal JSON object as a LZW string:**

var lzwString = JSONC.pack( json );

**Decompress using java:**
String input = BinaryStdIn.readString();
TST<Integer> st = new TST<Integer>();
for (int i = 0; i < R; i++)
     st.put("" + (char) i, i);
int code = R+1;  // R is codeword for EOF

while (input.length() > 0) {
String s = st.longestPrefixOf(input);  // Find max prefix match s.
BinaryStdOut.write(st.get(s), W);      // Print s's encoding.
int t = s.length();
if (t < input.length() && code < L)    // Add s to symbol table.
    st.put(input.substring(0, t + 1), code++);
    input = input.substring(t);            // Scan past s in input.
}
BinaryStdOut.write(R, W);
BinaryStdOut.close();
0 голосов
/ 05 февраля 2019

Наиболее подходящим сжатием может быть GZip.Вы можете загрузить содержимое, сжатое с помощью GZip, и настроить сервер для обработки заголовка Content-Encoding, чтобы он автоматически распаковывался на стороне сервера.Посмотрите на следующую ссылку. введите описание ссылки здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...