java - আমি লম্বা থেকে বাইট[] এবং জাভাতে ফিরে কিভাবে রূপান্তর করব




byte long-integer (7)

আপনি Google Guava থেকে বাইট রূপান্তর পদ্ধতি ব্যবহার করতে পারে।

উদাহরণ:

byte[] bytes = Longs.toByteArray(12345L);

আমি কিভাবে একটি দীর্ঘ একটি বাইট [] এবং ফিরে জাভা রূপান্তর করতে পারি? আমি একটি বাইট [] একটি দীর্ঘ রূপান্তর করার চেষ্টা করছি যাতে আমি একটি tcp সংযোগ উপর বাইট [] পাঠাতে পারবেন। অন্য দিকে আমি যে বাইট [] গ্রহণ করতে চান এবং এটি একটি ডবল মধ্যে রূপান্তর করতে চান। কোন টিপস প্রশংসা করা হবে।


আপনি org.apache.hadoop.hbase.util.bytes এ বাস্তবায়ন ব্যবহার করতে পারেন http://hbase.apache.org/apidocs/org/apache/hadoop/hbase/util/Bytes.html

উৎস কোড এখানে:

http://grepcode.com/file/repository.cloudera.com/content/repositories/releases/com.cloudera.hbase/hbase/0.89.20100924-28/org/apache/hadoop/hbase/util/Bytes.java#Bytes.toBytes%28long%29

লম্বা এবং tobytes পদ্ধতির জন্য সন্ধান করুন।

আমি বিশ্বাস করি সফটওয়্যার লাইসেন্সটি আপনাকে কোডের অংশ নিতে এবং এটি ব্যবহার করতে দেয় তবে দয়া করে এটি যাচাই করুন।


আমি বাইটবফার পদ্ধতিটি প্লেইন বিটwise অপারেশনগুলির বিরুদ্ধে পরীক্ষা করেছি কিন্তু পরবর্তীতে উল্লেখযোগ্যভাবে দ্রুত।

public static byte[] longToBytes(long l) {
    byte[] result = new byte[8];
    for (int i = 7; i >= 0; i--) {
        result[i] = (byte)(l & 0xFF);
        l >>= 8;
    }
    return result;
}

public static long bytesToLong(byte[] b) {
    long result = 0;
    for (int i = 0; i < 8; i++) {
        result <<= 8;
        result |= (b[i] & 0xFF);
    }
    return result;
}

একটি অন্তর্নিহিত ByteArrayOutputStream সহ একটি DataOutputStream দীর্ঘ লিখুন। ByteArrayOutputStream থেকে আপনি toByteArray() বাইট-অ্যারে পেতে পারেন:

class Main
{

        public static byte[] long2byte(long l) throws IOException
        {
        ByteArrayOutputStream baos=new ByteArrayOutputStream(Long.SIZE/8);
        DataOutputStream dos=new DataOutputStream(baos);
        dos.writeLong(l);
        byte[] result=baos.toByteArray();
        dos.close();    
        return result;
        }


        public static long byte2long(byte[] b) throws IOException
        {
        ByteArrayInputStream baos=new ByteArrayInputStream(b);
        DataInputStream dos=new DataInputStream(baos);
        long result=dos.readLong();
        dos.close();
        return result;
        }


        public static void main (String[] args) throws java.lang.Exception
        {

         long l=123456L;
         byte[] b=long2byte(l);
         System.out.println(l+": "+byte2long(b));       
        }
}

অনুযায়ী অন্যান্য primitives জন্য কাজ করে।

ইঙ্গিত: টিসিপি জন্য আপনি বাইট [] ম্যানুয়াল প্রয়োজন হয় না। আপনি একটি Socket socket এবং তার প্রবাহ ব্যবহার করা হবে

OutputStream os=socket.getOutputStream(); 
DataOutputStream dos=new DataOutputStream(os);
dos.writeLong(l);
//etc ..

পরিবর্তে.


যদি আপনি ইতিমধ্যে সকেটে লেখার জন্য OutputStream ব্যবহার করেন তবে DataOutputStream একটি ভাল ফিট হতে পারে। এখানে একটি উদাহরণ:

// Assumes you are currently working with a SocketOutputStream.

SocketOutputStream outputStream = ...
long longValue = ...

DataOutputStream dataOutputStream = new DataOutputStream(outputStream);

dataOutputStream.writeLong(longValue);
dataOutputStream.flush();

short , int , float ইত্যাদির জন্য একই পদ্ধতি রয়েছে। আপনি তারপর প্রাপ্তির দিক থেকে DataInputStream ব্যবহার করতে পারেন।


যদি আপনি দ্রুত অনিয়মিত সংস্করণের জন্য অনুসন্ধান করেন, তবে এটি একটি বিট অ্যারে অনুমান করা উচিত যা "বি" নামক একটি দৈর্ঘ্য 8:

বাইট [] -> দীর্ঘ

long l = ((long) b[7] << 56)
       | ((long) b[6] & 0xff) << 48
       | ((long) b[5] & 0xff) << 40
       | ((long) b[4] & 0xff) << 32
       | ((long) b[3] & 0xff) << 24
       | ((long) b[2] & 0xff) << 16
       | ((long) b[1] & 0xff) << 8
       | ((long) b[0] & 0xff);

দীর্ঘ -> বাইট [] উপরে একটি সঠিক প্রতিরূপ হিসাবে

byte[] b = new byte[] {
       (byte) lng,
       (byte) (lng >> 8),
       (byte) (lng >> 16),
       (byte) (lng >> 24),
       (byte) (lng >> 32),
       (byte) (lng >> 40),
       (byte) (lng >> 48),
       (byte) (lng >> 56)};

 public static long bytesToLong(byte[] bytes) {
        if (bytes.length > 8) {
            throw new IllegalMethodParameterException("byte should not be more than 8 bytes");

        }
        long r = 0;
        for (int i = 0; i < bytes.length; i++) {
            r = r << 8;
            r += bytes[i];
        }

        return r;
    }



public static byte[] longToBytes(long l) {
        ArrayList<Byte> bytes = new ArrayList<Byte>();
        while (l != 0) {
            bytes.add((byte) (l % (0xff + 1)));
            l = l >> 8;
        }
        byte[] bytesp = new byte[bytes.size()];
        for (int i = bytes.size() - 1, j = 0; i >= 0; i--, j++) {
            bytesp[j] = bytes.get(i);
        }
        return bytesp;
    }





long-integer