代码更改本身很简单,但我想了解实现它的最佳方法是什么;为什么。
我正在修改一个包含一个名为Fs
的抽象类的包,它有一个抽象函数write(Path p, InputStream is, Long size)
。此方法在各种类中实现,例如HttpFs
,HadoopFs
等,每个类都负责处理相应目标上的文件写入操作。
write(..)
中实现的 HadoopFs
在结尾处进行检查,如果Long Size
不等于写入的字节数(totalBytesWritten
),则会引发错误。
现在在我的特定用例中;输入使用AES加密以及PKCS5填充进行加密。因此加密前的大小永远不会等于加密后的大小。如果我们使用公式paddedSize = size + (16 - (size%16))
知道真实大小,则可以获得加密(填充)大小。然而,由于显而易见的原因,反之亦然。
现在我想在write
的{{1}}末尾执行相同的检查,检查加密方法;如果存在PKCS5填充,则将HadoopFs
转换为totalBytesWritten
,然后然后根据输入参数totalBytesWrittenPlusPadding
对其进行检查,以查看写入是否正确。
明智地做这个设计的最佳方式是什么?
Long Size
的{{1}}中实现一个单独的函数,该函数带有一个名为HadoopFs
的附加参数;我在其中检查PKCS5并检查之前添加字节。但这意味着writeEncrypted
逻辑的其余部分基本上会在两个函数中重复。String cipher
的{{1}}中实现单独的抽象函数,并在write
中覆盖它。但这意味着我必须在Fs
等writeEncrypted
中HadoopFs
的参数以获取HttpFs
参数。但是这会迫使任何人延长write
来处理密码,即使他们不使用加密数据,所以它似乎不是一个优雅的解决方案需要来自Java专业人士的建议!感谢。