首页 / JAVA / java – GZIP吃换行符
java – GZIP吃换行符
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – GZIP吃换行符,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1565字,纯文字阅读大概需要3分钟。
内容图文
![java – GZIP吃换行符](/upload/InfoBanner/zyjiaocheng/758/c938b77c0fcf46049c49004065d3b5bc.jpg)
我有以下代码来压缩和解压缩字符串.
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吃换行符全部内容,希望文章能够帮你解决java – GZIP吃换行符所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。