针对append、open方法,实现获取文件的xattr
作者:互联网
针对append、open方法,实现获取文件的xattr
####1、针对create方法的改进
当一个文件create
时,会主动获取父目录的xattr
。如果父目录具有xattr
且值为true
,这时文件会被压缩;如果父目录的xattr
值为false
或者xattr
不存在,这时文件不会被压缩。根据文件是否被压缩,设置文件的xattr
值为true
或者false
。
需要在create方法中,增加以下代码:
//如果isZip为true,这时文件会被压缩,需要设置文xattr也为true
if (isZip) {
value=("true").getBytes("utf-8");
}else{
value=("false").getBytes("utf-8");
}
setXAttr(p, "user.zip", value);
####2、针对append和open方法,改进xattr的获取
-
在使用
append
方法时,默认只对文件进行APPEND
,而且要求文件已经存在。 -
append
时,只需要获取文件本身的xattr
即可,并根据xattr
的值决定是否对文件进行压缩。 -
由于在文件
create
时已经设置了文件xattr
,open
时,只需要获取文件本身的xattr
即可,并根据xattr
的值决定是否对文件进行解压缩。
####3、在调用getZipXattr4AppendOpen()和getZipXattr4Create()的参数传递问题
append
中调用getZipXattr4AppendOpen(String)
的具体代码如下:
boolean isZip=getZipXattr4AppendOpen(p.toString());
create
中调用getZipXattr4Create(String)
的具体代码如下:
boolean isZip=getZipXattr4Create(f.toString());
其中p.toString()
是来自他所在的doCall()
方法,而f.toString()
来自create()
。
有区别的原因:p.toString()
在传入文件为1.txt
时,它的值为hdfs://192.168.202.34/user/cephlee/1.txt
,并非我们期待的getZipXattr4Create()
的参数1.txt
。需要使用f.toString()
获取原本的参数1.txt
。
标签:文件,true,open,create,toString,xattr,append 来源: https://blog.csdn.net/u014454538/article/details/81515237