תת-מחלקות עקיפות ידועות Bfloat16Layout , BoolLayout , BooleanDataLayout <S מרחיב את DataBuffer <?>>, ByteDataLayout <S מרחיב את DataBuffer <?>>, DoubleDataLayout <S מרחיב את DataBuffer <?>>, Float16Layout , FloatDataLayout <S>> מרחיב את DataLayout <S?>> DataBuffer <?>>, LongDataLayout <S מרחיב את DataBuffer <?>>, ShortDataLayout <S מרחיב את DataBuffer <?>>, StringLayout |
ממירה נתונים המאוחסנים במאגר לסוג נתון.
מופעי 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
מציין את מיקום ההתחלה של הרצף שייכתב למאגר. פרמטרים
בַּלָם | המאגר לכתוב אליו |
---|---|
עֵרֶך | הערך בסוג המשתמש להמרה ולכתיבה |
מַדָד | אינדקס במאגר שבו יש לכתוב את הערך המומר |