java 字节数组换行符_java – GZIP吃换行符

我有以下代码来压缩和解压缩字符串.

public static byte[] compress(String str)

{

try

{

ByteArrayOutputStream obj = new ByteArrayOutputStream();

GZIPOutputStream gzip = new GZIPOutputStream(obj);

gzip.write(str.getBytes("UTF-8"));

gzip.close();

return obj.toByteArray();

}

catch (IOException e)

{

e.printStackTrace();

}

return null;

}

public static String decompress(byte[] bytes)

{

try

{

GZIPInputStream gis = new GZIPInputStream(new ByteArrayInputStream(bytes));

BufferedReader bf = new BufferedReader(new InputStreamReader(gis, "UTF-8"));

StringBuilder outStr = new StringBuilder();

String line;

while ((line = bf.readLine()) != null)

{

outStr.append(line);

}

return outStr.toString();

}

catch (IOException e)

{

return e.getMessage();

}

}

我在Windows上压缩成字节数组,然后通过套接字将字节数组发送到linux并在那里解压缩.然而,在解压缩时,似乎我的所有换行符都消失了.

所以我认为问题是linux与windows的关系.但是我尝试在使用它的Windows上编写一个简单的程序,并发现新行仍然没有了.

任何人都可以了解导致它的原因吗?我无法弄清楚任何解释.

解决方法:

我认为问题在于:

while ((line = bf.readLine()) != null)

{

outStr.append(line);

}

readLine看到的是换行符char,但不包含在行的返回值中

或许问题比你想象的还要糟糕.

readLine()获取所有字符,但不包括换行符(或各种返回和换行符)或文件结尾.所以你不知道你得到的最后一行是否有新行.

这可能无关紧要,如果是这样,您可以在另一个追加后添加:

outStr.append('\n');

某些文件可能会以文件末尾的额外行结束.

如果它确实重要,您将需要使用read()然后输出您收到的所有字符.在这种情况下,你最终可能会得到臭名昭着的“最后一行是什么?”您在Windows,Linux和MacOS之间提到的问题以及它们使用返回行和换行符的不同组合的方式.

标签:java,gzip,gzipinputstream,gzipoutputstream

来源: https://codeday.me/bug/20190716/1478226.html


版权声明:本文为weixin_39762075原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。