From 7c60b17f375edbd45b2650e05734413c35af20a3 Mon Sep 17 00:00:00 2001 From: "(no author)" <(no author)@71dcc7fd-b1f2-4e5d-bb8e-274146e81173> Date: Sun, 30 Jan 2022 14:16:24 +0000 Subject: [PATCH] checkDataIntegrity git-svn-id: svn://home0/checkDataIntegrity@2416 71dcc7fd-b1f2-4e5d-bb8e-274146e81173 --- bin/checkDataIntegrity/Main.class | Bin 0 -> 5721 bytes bin/module-info.class | Bin 0 -> 157 bytes checkDataIntegrity.jar | Bin 0 -> 11159 bytes src/checkDataIntegrity/Main.java | 70 ++++++++++++++++++++++++++++++ src/module-info.java | 2 + 5 files changed, 72 insertions(+) create mode 100644 bin/checkDataIntegrity/Main.class create mode 100644 bin/module-info.class create mode 100644 checkDataIntegrity.jar create mode 100644 src/checkDataIntegrity/Main.java create mode 100644 src/module-info.java diff --git a/bin/checkDataIntegrity/Main.class b/bin/checkDataIntegrity/Main.class new file mode 100644 index 0000000000000000000000000000000000000000..524a4f00b7ef6b40b09f1af3d8189353423b9c17 GIT binary patch literal 5721 zcma)A31C#!6+LgV{8|1aLm zJon!N2LW6tyc%2r)1#wSbjwQ9F}o6uHIlZS9ibl6PH3nV2y8aDnxUAP7zy-=4>x8t)+Fs7TW5(ycP?k7SnKnj>U{JOo?XGX)EEZv*T8e9g9h~Gj`T!SSm0_ z-6`wXu~0Ob$a98FCmFY+p%rTAP9{dYSOQNIqqbegGRWW?u^5YI6ckYchO>#NjD}EO zHkFFmR+{=>j1CPeXy%gb){WA)LnwAts`sSKzct z`Kx(Izn!t2UIh~`UWYynmlr~_C_wUMbgaXAqHdcR+al1LSEa}!b&ceeDH4x6Ad)wZ zGF?VtD3pg%6I^(`jw`T%M>tl7-V0Xu-rBS^WJgWMiuf>qH)y!B5c(6v>UbmG#PFsy z9g8qtTGe+YiIeG915?K!q7p4pnOFp#Di=3dd`2eXVNyzY;FK{=B&#b=dUE-diU{ar zPRz!M0BJ%?$1p|+&f#Qwl^GqCmd_np8RErFt^IPFtz)xH=ylOpGQ$)f18YLO5Id?S zP~YS>nbdV8krMEmLqigLX)BYlm~Cd{c)@^*vHs#}*#Zc%BISpJ86G#i?6~r%$aC;aqs)bsP-DrgthhT;g{nKNy4d!Cj^(^g=tLsha|=b- zt6U&=`1>3)x~0cVsj9BwI$kDb#s`PY*}Oz;OY1;Ki6VI%Pw4n0?%?5e=5lK!8#B`~4GAo&D)IP~Rgx8H-AHo=>3!-tt=bh!3bVHD zKWUGa895&+lTyn4TgEt%{Qr|dwM(@2OT^rx>M>Q7Opw;xL}maHP;KDBrF~r_CKK#9zYmbcA(P){HSR`6#TbOa5=&=*Cy*!*Edc z>qUWXyg)RBgT<~_HefH}8ydb|P*&NzxUS=yvZeE~iRxjhW_wE;r-*`@w8aj{mEvM8 zGm*qF2R`X`$r7ZN+U0T!RkBGLj3si5uH2Lqm$kjPyHY1+6K`KKn~qvJG<)Pri0ZIu zqK;(JVeFZy9?Ka`4zULO3cu0tYk{*$Y1vL}O>VJ5-75c((Hu6TPBP6}@mu_kW{j6e z0?(JnXMSf+_@!oIh(%&{H>*=NHF;&P*tm{)ww(Rs7js8WzPB82dC8q-EY@eUQEIHm zF9Ueg%NF#HIzED1Nccklx8!Mm)$vh9dxbO!-m)x{hgs{!0RAEOzpCS7xRv{l25{>M zc>4qR4|(Zs+=X4_J$Ax$-X9Qr$JDzL2`k+hGuakoG{L6g>v(r$%6(ok}JS@Emx*U zF|Moms{>+L+rhfKpg)AEO~x2z?QN@B)ZJFQsOKS^`50zzXqvMREpx}vHiiXUE>IVd zI@$1^ z&=2g#Mi-2_x$_Loa2ph`Nz#T$^F4!QhHpQZ$amwsutyTSd4l0N6!sdPXG!peJ-ac* z@EG2E_{3ohTew`%`YLKoUC*?}kZIalR6oCL)Qw^LINnUArngR5tS>FTt+=?CW_<_l z#=|si22b-NO)TBfk7oWh&})tS4e+-KQ~8*VYb%)nY0*npXcViw{!jnYoX z`w+wp^#9$s2tViRo(mn~40MWitW@s3k}jp=@OE6sGp33*?s_L3J6+7dyEt=E^55}p zyod3#7BAzyxSsK|0WVSV_0%Ye@8SLU00SV77w|#O+?244FH9ez{2M4U$elT^8;e{w z7P&r5uA9iU1X|-U?1E3j%^FtoTdQG-`d+Mo-|VqaQMs^?hk7cAoIrYAS1@mazT-g?67(IBJt;Nn1YV{_mREGY!1 zmOH2E>0FK2$v_BJ=V?!=6$ONOVWxzX^}GzZ4<>}?a}fB9tO zOUX0Up}WyU_?C3=9g=EXqtw`qEU)X6z|_M&2~3}%OJH)4z%1%(_zq3V$YtO0cK9mw zG<;+D+Hv~sCDb-C*UzF~_uvsV9>GyHuE#EMp`ssD;}KCKN6{eK)bkoVAU3J>!)iPt z{Bq>_CiT3M>pR(s?7?9*%5^?-eW!Y^QPAH^I0I)9ag15E3C$oUB8hp`Apa6Z0^3-Aj6=ya5SS@N^lZQ!^QVR0=YVi(%Q zy;!cIcUYb(?!&hjz4iRt;LZ3plYqvSXgj_`nwxu)l(vs)W2LYN{(aoBUbyjn{D2i= z6Q0EnIcuP1_uxnPF)f(J?f4020iM=^pWPLNW)q{QOX1_lO3pj8mS b#J~(>Ffp(&umWi@1~#xTBLhbRm;oUG^JXB* literal 0 HcmV?d00001 diff --git a/checkDataIntegrity.jar b/checkDataIntegrity.jar new file mode 100644 index 0000000000000000000000000000000000000000..6ace6bc2bb7bebf2f7771cfbb1ea25febce8d329 GIT binary patch literal 11159 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 literal 0 HcmV?d00001 diff --git a/src/checkDataIntegrity/Main.java b/src/checkDataIntegrity/Main.java new file mode 100644 index 0000000..dc0036f --- /dev/null +++ b/src/checkDataIntegrity/Main.java @@ -0,0 +1,70 @@ +package checkDataIntegrity; + +import java.io.IOException; +import java.io.InputStream; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.Arrays; +import java.util.concurrent.atomic.AtomicLong; +import java.util.stream.Stream; + +public class Main { + + public static void main(final String[] args) throws IOException { + if (args.length < 2) { + System.err.println("Usage: checkDataIntegrity.java "); + return; + } + final String path0 = args[0]; + final String path1 = args[1]; + System.out.println("Path0: " + path0); + System.out.println("Path1: " + path1); + + final long start = System.currentTimeMillis(); + final AtomicLong count = new AtomicLong(); + final AtomicLong countErr = new AtomicLong(); + final ThreadLocal bufs0 = ThreadLocal.withInitial(() -> new byte[4096]); + final ThreadLocal bufs1 = ThreadLocal.withInitial(() -> new byte[4096]); + + try (Stream walk = Files.walk(Path.of(path0))) { + walk +// .parallel() + .filter(Files::isRegularFile) + .forEach(p0 -> { + count.incrementAndGet(); + + final String rel = p0.toString().substring(path0.length()); + final Path p1 = Path.of(path1 + rel); + + final byte[] buf0 = bufs0.get(); + final byte[] buf1 = bufs1.get(); + try (InputStream inputStream0 = Files.newInputStream(p0); InputStream inputStream1 = Files.newInputStream(p1);) { + final int len0 = inputStream0.read(buf0); + final int len1 = inputStream1.read(buf1); + if (len0 != len1) { + System.out.println(rel + ": Length mismatch"); + countErr.incrementAndGet(); + return; + } + if (len0 == -1) { + return; + } + if (!Arrays.equals(buf0, 0, len0, buf1, 0, len1)) { + System.out.println(rel + ": Data mismatch"); + countErr.incrementAndGet(); + return; + } + } + catch (final Exception ex) { + System.out.println(rel + ": Exception: " + ex.getMessage()); + countErr.incrementAndGet(); + } + }); + } + + System.out.println("Took " + (System.currentTimeMillis() - start) + "ms"); + System.out.println(count.get() + " files"); + System.out.println(countErr.get() + " errors"); + } + +} diff --git a/src/module-info.java b/src/module-info.java new file mode 100644 index 0000000..239ba62 --- /dev/null +++ b/src/module-info.java @@ -0,0 +1,2 @@ +module checkDataIntegrity { +}