2015-04-02 9 views
8

क्या कोई ऐसा पैकेज है जो जावा प्राइमेटिव्स के आकार को परिभाषित करता है जिसे मैं अपनी परियोजना में आयात कर सकता हूं? मैं कुछ मैन्युअल बिट सेटिंग कर रहा हूं और मैं एक बाइट इंडेक्स रखता हूं। मैं currentByte += 4 नहीं करना चाहता हूं जब मैं एक int सेट करता हूं (जादू संख्याएं फेंकती हैं), मैं currentByte += <SomePackage>.SIZE_OF_INTक्या जावा अपने आदिम प्रकारों के आकार को कहीं भी परिभाषित करता है?

मुझे लगता है कि मैं अपना खुद का परिभाषित कर सकता हूं, लेकिन यह एक तरह का गुंजाइश है, खासकर यदि वे कहीं भी उपलब्ध हैं।

+2

[जावा में आदिम डेटाटाइप] (https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html) – nem035

+2

यदि आप 'currentByte' का उपयोग कर रहे हैं, तो शायद एक बेहतर डेटा संरचना है एक बफर जैसे उपयोग कर सकते हैं। – chrylis

+0

मैं प्रक्रिया कारणों से न्यूनतम परिवर्तनों को रखने की कोशिश कर रहा हूं, लेकिन यह एक विचार देगा। – ventsyv

उत्तर

24

कक्षा नहीं है, लेकिन आपके पास Integer.SIZE है, और Long और फ़्लोटिंग पॉइंट क्लासेस भी हैं। आपके पास *.BYTES भी है।

इसलिए Integer.SIZE 32, Integer.BYTES है 4, Double.SIZE 64 और Double.BYTES 8, आदि आदि है; यदि आप सोच रहे थे तो ये सभी int एस हैं।

नोट: *.BYTES केवल (देख के लिए धन्यवाद @Slanec) जावा 8 के बाद से परिभाषित कर रहे हैं

(? *.SIZE जावा 5 में दिखाई दिया, लेकिन आप ठीक है, कि कम से कम उपयोग कर )

और हां, यह जेडीके द्वारा परिभाषित किया गया है क्योंकि जेएलएस खुद को आदिम प्रकारों के आकार को परिभाषित करता है; इसलिए आप गारंटी देते हैं कि आपके पास जो भी मंच पर जावा कार्यान्वयन पर इन स्थिरांक के लिए समान मूल्य होंगे।

+0

जावा एसई 7 मेरा लक्ष्य डिस्ट्रो है। – ventsyv

+0

@ventsyv तो आपके पास कम से कम '* है। .SIZE' – fge

8

पुरातन के आकार के लिए विनिर्देश जावा भाषा विशिष्टता में निहित है, Section 4.2

अभिन्न प्रकार, लंबे समय से बाइट, लघु, पूर्णांक हैं, और जिनके मान रहे हैं 8 बिट, 16 बिट, 32-बिट और 64-बिट क्रमशः दो के पूरक पूर्णांक, और चार पर हस्ताक्षर किए, जिनके मान 16-बिट हस्ताक्षरित पूर्णांक हैं जो यूटीएफ -16 कोड इकाइयों (§3.1) का प्रतिनिधित्व करते हैं।

यह है मानक और परिवर्तन नहीं होगा, तो उन्हें एक में आयात करने की आवश्यकता नहीं है। आप (जादू संख्या के रूप में उपयोग कर सकते हैं, हालांकि के रूप में fge अंक बाहर, कि इन जादू नंबर दिए गए हैं कि जमा हो जाती है जावा 5 के बाद से विभिन्न रैपर वर्गों में समझदार स्थानों में और आपको उनको स्वयं को फिर से परिभाषित करने के बजाय उपयोग करना चाहिए)।

+1

मानक बदलते हैं – shookees

+3

@shookees इन मानों में से कोई भी परिवर्तन सभी वर्ग फ़ाइलों और उनके पीछे और आगे संगतता के लिए एक तोड़ने वाला परिवर्तन होगा।'आपका कोड अब काम नहीं करता * * के रूप में * काम करता है' आपके कोड अब काम नहीं करता है 'की तुलना में एक मामूली होगा। मुझे विश्वास नहीं है कि ये बिल्कुल बदल सकते हैं और जावा बने रहेंगे। यह देखते हुए कि 'Integer.SIZE' एक स्थिर फ़ाइनल है और इसे इंटीजर में मान का उपयोग करके संकलन समय पर प्रतिस्थापित किया गया है, अगर इसे बदलना है, तो इसके बाद के संस्करण में बदलने के लिए भी एक ब्रेकिंग बदलाव होगा। –

+3

@ शूकीज, जबकि मैं पूरी तरह से सहमत हूं कि मानक बदलते हैं, मैं इस तरह की चीज को कॉल करने में सहज महसूस करूंगा जो आम तौर पर नहीं बदलेगा। ओरेकल जावा के पीछे है, और ओरेकल ऐसी चीजों को बदलने के लिए कंपनी की तरह नहीं है। इसी तरह की कंपनियों और कंसोर्टियम द्वारा मानकों को देखते हुए, यह विस्तार से बचने के लिए पीछे की तरफ झुकने वाला विवरण है। यदि भाषा की कल्पना ओरेकल को बदलने के कारण पर्याप्त तनावग्रस्त हो गई है, तो मुझे लगता है कि ऐसे कई अन्य मुद्दे होंगे जो आकार आपकी चिंताओं का कम से कम होगा। –

संबंधित मुद्दे