סכומי בדיקה בג'אווה

ג'אווה טופ

רק הכרזתי על החדש למד אביב קורס, המתמקד ביסודות האביב 5 ומגף האביב 2:

>> בדוק את הקורס

1. סקירה כללית

במאמר מיני זה נסביר הסבר קצר על סכומי בדיקה ונראה כיצד להשתמש בחלקם התכונות המובנות של Java לחישוב סכומי בדיקה.

2. סכומי בדיקה ואלגוריתמים נפוצים

בעיקרו של דבר, בדיקת בדיקה היא ייצוג מזערי של זרם נתונים בינארי.

בדרך כלל משתמשים בסכומי בדיקה לצורך תכנות רשת בכדי לבדוק שהתקבלה הודעה מלאה. עם קבלת הודעה חדשה, ניתן לחשב את בדיקת הבדיקה מחדש ולהשוות אותה לסכום הבדיקה שהתקבל כדי להבטיח שלא אבדו סיביות. בנוסף, הם עשויים להיות שימושיים גם לניהול קבצים, למשל להשוואת קבצים או לאיתור שינויים.

ישנם מספר אלגוריתמים נפוצים ליצירת בדיקות בדיקה, כגון Adler32 ו- CRC32. אלגוריתמים אלה פועלים על ידי המרת רצף נתונים או בתים לרצף קטן הרבה יותר של אותיות ומספרים. הם תוכננו כך שכל שינוי קטן בקלט יביא לסכום בדיקה מחושב שונה בתכלית.

בואו נסתכל על התמיכה של Java ב- CRC32. שים לב שבעוד CRC32 עשוי להיות שימושי עבור בדיקות בדיקה, זה לא מומלץ לפעולות מאובטחות, כמו לשטוף סיסמה.

3. בדיקת בדיקה ממחרוזת או מערך בתים

הדבר הראשון שעלינו לעשות הוא להשיג את הקלט לאלגוריתם בדיקת הבדיקה.

אם אנחנו מתחילים עם חוּט, אנחנו יכולים להשתמש ב- getBytes () שיטה להשיג מערך בתים מ- חוּט:

מבחן מחרוזת = "מבחן"; בתים [] בתים = test.getBytes ();

לאחר מכן נוכל לחשב את סכום הבדיקה באמצעות מערך הבתים:

זמן סטטי ציבורי ארוך getCRC32Checksum (בתים [] בתים) {Checksum crc32 = CRC32 חדש (); crc32.update (בתים, 0, בתים.אורך); החזר crc32.getValue (); }

כאן אנו משתמשים במובנה של Java CRC32 מעמד. ברגע שהשיעור הוא מיידי, אנו משתמשים ב- עדכון שיטה לעדכון סכום בדיקה מופע עם בתים מהקלט.

במילים פשוטות, ה עדכון השיטה מחליפה את הבתים המוחזקים על ידי CRC32לְהִתְנַגֵד - זה עוזר לשימוש חוזר בקוד ומבטל את הצורך ליצור מקרים חדשים של סכום בדיקה. ה CRC32 מחלקה מספקת כמה שיטות מוחלפות להחלפת מערך הבתים כולו או כמה בתים בתוכו.

לבסוף, לאחר הגדרת הבתים, אנו מייצאים את סכום הבדיקה עם getValue שיטה.

4. בדיקת בדיקה מ- InputStream

בעת התמודדות עם מערכי נתונים גדולים יותר של נתונים בינאריים, הגישה שלעיל לא תהיה יעילה מאוד בזיכרון מכיוון שכל בתים נטענים בזיכרון.

כשיש לנו InputStream, אנו עשויים לבחור להשתמש CheckedInputStream כדי ליצור את סכום הבדיקה שלנו. באמצעות גישה זו, אנו יכולים להגדיר כמה בתים מעובדים בכל פעם.

בדוגמה זו אנו מעבדים כמות בתים נתונה באותו זמן עד שנגיע לסוף הזרם.

ערך סכום הבדיקה זמין לאחר מכן מה- CheckedInputStream:

getChecksumCRC32 (זרם InputStream, int bufferSize) סטטי ציבורי ארוך זורק IOException {CheckedInputStream בדקInputStream = CheckedInputStream חדש (זרם, CRC32 חדש ()); בתא [] מאגר = בתים חדשים [bufferSize]; בעוד (בדקInputStream.read (חיץ, 0, חיץ.אורך)> = 0) {} החזר בדק CheckInputStream.getChecksum (). getValue (); }

5. מסקנה

במדריך זה אנו בוחנים כיצד ליצור סכומי בדיקה ממערכי בתים ו- InputStreams באמצעות תמיכת CRC32 של Java.

כמו תמיד, הקוד זמין ב- GitHub.

תחתית Java

רק הכרזתי על החדש למד אביב קורס, המתמקד ביסודות האביב 5 ומגף האביב 2:

>> בדוק את הקורס

$config[zx-auto] not found$config[zx-overlay] not found