使用IO流将数据库中数据生成一个文件,结果使用Notepad++打开部分数据结尾出现NUL

Posted *青锋*

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用IO流将数据库中数据生成一个文件,结果使用Notepad++打开部分数据结尾出现NUL相关的知识,希望对你有一定的参考价值。

场景描述:

  项目中通过java代码中从数据库中查询一系列数据,对数据做相应处理,然后通过字符流将数据写如一个新生成的文件中,将该项目部署在linux服务器上,最后生成的文件拿到本地使用notepad++打开会在部分数据末尾出现NUL

排查原因:

  • NUL在C语言中是一个特殊字符常量‘\0‘,空字符
  • 在linux中处理字符串写入,每行字符串结尾如果是空字符,linux就会用‘\0‘表示

解决方案:

  使用该文件时将NUL替换为“ ”空字符

    public static String trimnull(String string) throws UnsupportedEncodingException
    {//该方法作用是使用" "替换一个字符串中的所有NUL
		ArrayList<Byte> list = new ArrayList<Byte>();
		byte[] bytes = string.getBytes("UTF-8");
		for(int i=0;bytes!=null&&i<bytes.length;i++){
			if(0!=bytes[i]){//排除NUL(0)
				list.add(bytes[i]);
			}else {
				byte b = 32;//空字符对应的byte值
				list.add(b);
			}
		}
		byte[] newbytes = new byte[list.size()];
		for(int i = 0 ; i<list.size();i++){
			newbytes[i]=(Byte) list.get(i); 
		}
		String str = new String(newbytes,"UTF-8");
	    return str;
    }

  

以上是关于使用IO流将数据库中数据生成一个文件,结果使用Notepad++打开部分数据结尾出现NUL的主要内容,如果未能解决你的问题,请参考以下文章

输入输出流

使用c#中的流将文件从服务器传输到客户端时数据丢失

使用c#中的流将文件从服务器传输到客户端时数据丢失

java中如何通过IO流将稀疏数组写入磁盘和从磁盘中读取,整行存,整行取

c++如何用文件流将数据存储到一个TxT文件中

Java基础笔记(三:文件与数据流)