Pourquoi le même programme JAVA fonctionne-t-il différemment dans différentes plates-formes telles que Windows et Linux?

Le même programme de paix de JAVA fonctionne différemment dans différentes plates-formes.

Par exemple, j’ai écrit un JAVA pour combiner différents fichiers Tiff stockés dans un dossier à Multi Page Tiff.

Veuillez trouver ci-dessous le programme.

public Ssortingng merge(Ssortingng dirPath) { Ssortingng inputDir = dirPath; File faxSource = new File(inputDir); File file[] = faxSource.listFiles(); int numImages = file.length; Ssortingng name = ""; List images = new ArrayList(); Arrays.sort(file, new Comparator() { 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 imageList = new ArrayList(); 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; } 

Supposons que le dossier contienne 4 images tiff (A.tiff, B.tiff, C, .tiff, D.tiff). Ces fichiers Tiff sont téléchargés à partir du S # dans l’ordre.

Si je lance le programme ci-dessus dans un serveur Windows, il fait un classement dans l’ordre A.tiff + B.tiff + C.tiff + D.tiff .

Si je lance le même programme dans Amazon EC2 Linux, j’obtiens la sortie A.tiff + B.tiff + D.tiff + C.tiff .

Une idée pour laquelle le même code JAVA s’exécute différemment sous Windows et Linux?

Vérifiez le système de fichiers sur votre machine Linux. la précision de la date de modification pour EXT3 , que j’imagine, est de 1 seconde. Si vous téléchargez deux fichiers en une seconde, ils peuvent avoir les mêmes temps.

Windows, d’autre part, utilise normalement NTFS, qui a une précision de 100 nanosecondes au moment des fichiers.