DataLayout

ממשק ציבורי DataLayout
תת-מחלקות עקיפות ידועות

ממירה נתונים המאוחסנים במאגר לסוג נתון.

מופעי DataLayout משמשים להגדרת פורמט מותאם אישית לאחסון וקריאה של נתונים של DataBuffer . הם מספקים שכבת הפרדה בין סוג הנתונים המאוחסנים במאגר (סוג המאגר ) לבין סוג הנתונים המטופלים על ידי משתמש הקצה (סוג המשתמש ).

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

כמו כן, מומלץ ליישם פריסות נתונים בלתי ניתנות לשינוי כך שניתן להחיל אותן מחדש על מספר מאגרים מבלי להקצות מחדש מופע חדש עבור כל אחד מהם. לְדוּגמָה:

 class BigIntegerBufferAllocator {

     public DataBuffer<BigInteger> allocate(long size) {
         return LAYOUT.applyTo(DataBuffers.ofLongs(size * LAYOUT.scale()));  // scale is 1 by default
     }

     private static final DataLayout<LongDataBuffer, BigInteger> LAYOUT = new DataLayout<LongDataBuffer, BigInteger>() {

         @Override
         public void writeObject(LongDataBuffer buffer, BigInteger value, long index) {
             buffer.setLong(value.longValue(), index);
         }

         @Override
         public BigInteger readObject(LongDataBuffer buffer, long index) {
             return BigInteger.valueOf(buffer.getLong(index));
         }
     };
 }
 

שיטות ציבוריות

מופשט DataBuffer <T>
applyTo (S buffer)
החל פריסה זו על המאגר המסופק.
תקציר T
readObject (מאגר S, אינדקס ארוך)
קורא ערכי n = scale() מהמאגר באינדקס הנתון ומחזיר אותם כערך בודד בסוג המשתמש.
מופשט int
קנה מידה ()
מציין את מספר ערכי המאגר הנדרשים כדי לייצג ערך משתמש בודד, ברירת המחדל היא 1.
ריק מופשט
writeObject (מאגר S, ערך T, אינדקס ארוך)
כותב ערך משתמש למאגר באינדקס הנתון לאחר המרתו לסוג המאגר.

שיטות ציבוריות

Public abstract DataBuffer <T> applyTo (S buffer)

החל פריסה זו על המאגר המסופק.

מופע ה- DataBuffer המוחזר הוא פשוט מעטפת למאגר המקורי ואין לו אחסון גיבוי משלו.

פרמטרים
בַּלָם מאגר היעד שעליו להחיל פריסה זו
מחזיר
  • מאגר עם פריסה זו

תקציר ציבורי T readObject (מאגר S, אינדקס ארוך)

קורא ערכי n = scale() מהמאגר באינדקס הנתון ומחזיר אותם כערך בודד בסוג המשתמש.

באחריות המיישמים של ממשק זה לקרוא את הערך שיש להמיר מהמאגר הנתון, תוך שימוש בשיטה המתאימה ביותר. לדוגמה, עבור פריסה שהמרת long יחיד למספר BigInteger ,

 @Override
 public BigInteger readObject(LongDataBuffer buffer, long index) {
   return BigInteger.valueOf(buffer.getLong(index));
 }
 
אם ערך משתמש בודד משתרע על פני יותר מערכי מאגר אחד, index מציין את מיקום ההתחלה של הרצף שיש לקרוא מהמאגר.

פרמטרים
בַּלָם המאגר שאפשר לקרוא ממנו
מַדָד מיקום המאגר לקריאה במאגר
מחזיר
  • הערך המומר

סולם תקציר ציבורי ()

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

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

public abstract void writeObject (מאגר S, ערך T, אינדקס ארוך)

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

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

 @Override
 public void writeObject(LongDataBuffer buffer, BigInteger value, long index) {
   buffer.setLong(value.longValue(), index);
 }
 
אם ערך משתמש בודד משתרע על פני יותר מערכי מאגר אחד, index מציין את מיקום ההתחלה של הרצף שייכתב למאגר.

פרמטרים
בַּלָם המאגר לכתוב אליו
עֵרֶך הערך בסוג המשתמש להמרה ולכתיבה
מַדָד אינדקס במאגר שבו יש לכתוב את הערך המומר