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 מציין את מיקום ההתחלה של הרצף שייכתב למאגר.

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