我想知道使用 Paths.get() 和 Path.resolve 之间有什么区别,如下例所示:
public static void main(String[] args) {
Path p1 = Paths.get("dir1","dir2","file.jpg");
Path p2 = Paths.get("").resolve("dir1/dir2/file.jpg");
System.out.println(p1.toString()); // yields: dir1/dir2/file.jpg
System.out.println(p2.toString()); // yields: dir1/dir2/file.jpg
}
Run Code Online (Sandbox Code Playgroud)
看起来两者的行为相同,但在 Java EE 应用程序中,我目睹了p1将主目录分配为前缀。我找到了 @Aleksandr Dubinsky 对 StackOverflow 问题How to join paths in Java?的回答。,但我不明白引用的javadoc的含义:
请注意,Paths.get() (如其他人建议的那样)没有采用 Path 的重载,并且执行 Paths.get(path.toString(), childPath) 与resolve () 不同。来自 Paths.get() 文档:
请注意,虽然此方法非常方便,但使用它意味着假定引用默认文件系统并限制调用代码的实用性。因此,它不应该在旨在灵活重用的库代码中使用。更灵活的替代方案是使用现有的 Path 实例作为锚点,例如:
Run Code Online (Sandbox Code Playgroud)Path dir = ... Path path = dir.resolve("file");
具体来说,我不明白 javadoc 想要说的“将暗示对默认文件系统的假定引用”。
我正在尝试从任意像素阵列生成 TIFF/EP Profile 2 原始 (.dng) 图像。该像素阵列代表拜耳模式(CFA)。
我研究了 TIFF/EP 文件规范,并通过使用 libtiff,包含了我认为生成完整 .dng 文件所需的所有标签。但是,我无法使用 dcraw 转换创建的文件(dcraw 显示无法解码文件)。
一个问题可能是由两个标签引起的,这两个标签在 TIFF/EP 规范中被声明为强制标签,但似乎并未在 libtiff 中实现:SensingMethod 和 TIFF/EPStandardID 标签。我真的必须包含它们吗(我已经看到示例代码忽略了这些标签,但仍然报告可以正常工作),如果是这样,我如何手动将它们添加到 libtiff 中?此外,设置 SubIFD 标记会产生错误消息“断言失败:*pa<=0xFFFFFFFFUL,文件 tif_dirwrite.c,第 1869 行”
总而言之,我不认为我的问题只是由于这三个标签造成的,而且我相信存在根本性的错误。也许你们中的某个人可以看看我的代码并提供一些线索?我不得不说 libtiff 的文档相当差,所以我的代码受到了极少数示例代码之一的启发:elphel_dng.c。
非常感谢!法比安
附言。我将生成的文件上传到Dropbox
C++
#include "tiffio.h"
#include <iostream>
using namespace std;
int main(void)
{
TIFF *tif = TIFFOpen("8bitRaw.dng", "w");
const int sampleperpixel = 1;
const int width = 4;
const int height = 4;
static const short bayerPatternDimensions[] = { 2,2 };
static const …Run Code Online (Sandbox Code Playgroud)