/** * Copyright 2013 The Loon Authors * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy of * the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under * the License. */ package loon.utils.res.foundation; import java.nio.ByteBuffer; import java.util.Arrays; import loon.LSystem; import loon.utils.Base64Coder; import loon.utils.MathUtils; import loon.utils.res.foundation.NSData; import loon.utils.res.foundation.NSObject; public class NSData extends NSObject { private byte[] bytes; public NSData(byte[] b) { if (Base64Coder.isArrayByteBase64(b)) { bytes = Base64Coder.decode(b); } else { this.bytes = b; } } public NSData(String base64) { String data = ""; if (Base64Coder.isBase64(base64)) { for (String line : base64.split("\n")) { data += line.trim(); } char[] enc = data.toCharArray(); bytes = Base64Coder.decodeBase64(enc); } else { this.bytes = base64.getBytes(); } } public byte[] bytes() { return bytes; } public int length() { return bytes.length; } public void getBytes(ByteBuffer buf, int length) { buf.put(bytes, 0, MathUtils.min(bytes.length, length)); } public void getBytes(ByteBuffer buf, int rangeStart, int rangeEnd) { buf.put(bytes, rangeStart, MathUtils.min(bytes.length, rangeEnd)); } public String getBase64() { byte[] buffer = Base64Coder.encode(bytes); try { return new String(buffer, LSystem.ENCODING); } catch (Throwable uue) { return new String(buffer); } } public String getString() { return getString(LSystem.ENCODING); } public String getString(String format) { byte[] buffer = this.bytes; try { return new String(buffer, format); } catch (Throwable uue) { return new String(buffer); } } @Override public boolean equals(Object obj) { return obj.getClass().equals(getClass()) && Arrays.equals(((NSData) obj).bytes, bytes); } @Override public int hashCode() { int hash = 5; hash = 67 * hash + Arrays.hashCode(this.bytes); return hash; } @Override protected void addSequence(StringBuilder sbr, String indent) { sbr.append(indent); sbr.append("<data>"); sbr.append(LSystem.LS); String base64 = getBase64(); for (String line : base64.split(LSystem.LS)) { sbr.append(indent); sbr.append(" "); sbr.append(line); sbr.append(LSystem.LS); } sbr.append(indent); sbr.append("</data>"); } }