JAVA程序的同样和平在不同的平台上是有区别的。
例如,我写了一个JAVA结合不同的Tiff文件存储在一个文件夹多页TIFF。
请在下面find该程序。
public String merge(String dirPath) { String inputDir = dirPath; File faxSource = new File(inputDir); File file[] = faxSource.listFiles(); int numImages = file.length; String name = ""; List<BufferedImage> images = new ArrayList<BufferedImage>(); Arrays.sort(file, new Comparator<File>() { public int compare(File f1, File f2) { return Long.compare(f1.lastModified(), f2.lastModified()); } }); try { for (int i = 0; i < numImages; i++) { name = name + file[i].getName(); SeekableStream ss = new FileSeekableStream(file[i]); ImageDecoder decoder = ImageCodec.createImageDecoder("tiff", ss, null); int numPages = decoder.getNumPages(); for (int j = 0; j < numPages; j++) { PlanarImage op = new NullOpImage( decoder.decodeAsRenderedImage(j), null, null, OpImage.OP_IO_BOUND); images.add(op.getAsBufferedImage()); } } // name=UUID.randomUUID().toString()+".tiff"; TIFFEncodeParam params = new TIFFEncodeParam(); params.setCompression(TIFFEncodeParam.COMPRESSION_DEFLATE); OutputStream out = new FileOutputStream(inputDir + "\\" + name); ImageEncoder encoder = ImageCodec.createImageEncoder("tiff", out, params); // encoder. List<BufferedImage> imageList = new ArrayList<BufferedImage>(); for (int i = 1; i < images.size(); i++) { imageList.add(images.get(i)); } params.setExtraImages(imageList.iterator()); encoder.encode(images.get(0)); out.close(); } catch (Exception e) { } return inputDir + "\\" + name; }
假定该文件夹包含4个tiff图像(A.tiff,B.tiff,C,.tiff,D.tiff)。这些Tiff文件是从S#按顺序下载的。
如果我在Windows Server上运行上述程序它正在做sortingA.tiff + B.tiff + C.tiff + D.tiff 。
如果我在亚马逊EC2 Linux中运行相同的程序,得到输出A.tiff + B.tiff + D.tiff + C.tiff 。
任何想法,为什么相同的JAVA代码在Windows和Linux中运行不同?
检查你的Linux机器上的文件系统; 我猜测它正在使用的EXT3
的修改日期的精度是1秒。 如果您在一秒钟内下载两个文件,它们可能都有相同的时间。
另一方面,Windows通常使用NTFS,文件时间精度为100纳秒。