NathanSweet 2016-04-14 14:43:00 +02:00
parent 2c0dea8f87
commit 47f79b7a8d

View File

@ -32,7 +32,6 @@
package com.esotericsoftware.spine; package com.esotericsoftware.spine;
import java.io.IOException; import java.io.IOException;
import java.nio.charset.Charset;
import com.badlogic.gdx.files.FileHandle; import com.badlogic.gdx.files.FileHandle;
import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.graphics.Color;
@ -105,9 +104,8 @@ public class SkeletonBinary {
SkeletonData skeletonData = new SkeletonData(); SkeletonData skeletonData = new SkeletonData();
skeletonData.name = file.nameWithoutExtension(); skeletonData.name = file.nameWithoutExtension();
final Charset utf8 = Charset.forName("UTF-8");
DataInput input = new DataInput(file.read(512)) { DataInput input = new DataInput(file.read(512)) {
private byte[] bytes = new byte[32]; private char[] chars = new char[32];
public String readString () throws IOException { public String readString () throws IOException {
int byteCount = readInt(true); int byteCount = readInt(true);
@ -118,9 +116,27 @@ public class SkeletonBinary {
return ""; return "";
} }
byteCount--; byteCount--;
if (bytes.length < byteCount) bytes = new byte[byteCount]; if (chars.length < byteCount) chars = new char[byteCount];
readFully(bytes, 0, byteCount); char[] chars = this.chars;
return new String(bytes, 0, byteCount, utf8); int charCount = 0;
for (int i = 0; i < byteCount;) {
int b = read();
switch (b >> 4) {
case 12:
case 13:
chars[charCount++] = (char)((b & 0x1F) << 6 | read() & 0x3F);
i += 2;
break;
case 14:
chars[charCount++] = (char)((b & 0x0F) << 12 | (read() & 0x3F) << 6 | read() & 0x3F);
i += 3;
break;
default:
chars[charCount++] = (char)b;
i++;
}
}
return new String(chars, 0, charCount);
} }
}; };
try { try {