Java tutorial
//package com.java2s; //License from project: Open Source License import java.util.Random; public class Main { public static byte[][] splitUnicodeMessage(byte[] aMessage, Integer maximumMultipartMessageSegmentSize) { final byte UDHIE_HEADER_LENGTH = 0x05; final byte UDHIE_IDENTIFIER_SAR = 0x00; final byte UDHIE_SAR_LENGTH = 0x03; // determine how many messages have to be sent int numberOfSegments = aMessage.length / maximumMultipartMessageSegmentSize; int messageLength = aMessage.length; if (numberOfSegments > 255) { numberOfSegments = 255; messageLength = numberOfSegments * maximumMultipartMessageSegmentSize; } if ((messageLength % maximumMultipartMessageSegmentSize) > 0) { numberOfSegments++; } // prepare array for all of the msg segments byte[][] segments = new byte[numberOfSegments][]; int lengthOfData; // generate new reference number byte[] referenceNumber = new byte[1]; new Random().nextBytes(referenceNumber); // split the message adding required headers for (int i = 0; i < numberOfSegments; i++) { if (numberOfSegments - i == 1) { lengthOfData = messageLength - i * maximumMultipartMessageSegmentSize; } else { lengthOfData = maximumMultipartMessageSegmentSize; } // new array to store the header segments[i] = new byte[6 + lengthOfData]; // UDH header // doesn't include itself, its header length segments[i][0] = UDHIE_HEADER_LENGTH; // SAR identifier segments[i][1] = UDHIE_IDENTIFIER_SAR; // SAR length segments[i][2] = UDHIE_SAR_LENGTH; // reference number (same for all messages) segments[i][3] = referenceNumber[0]; // total number of segments segments[i][4] = (byte) numberOfSegments; // segment number segments[i][5] = (byte) (i + 1); // copy the data into the array System.arraycopy(aMessage, (i * maximumMultipartMessageSegmentSize), segments[i], 6, lengthOfData); } return segments; } }