fixes
This commit is contained in:
parent
8ebb1a8e69
commit
420290fd28
14 changed files with 54 additions and 230 deletions
5
datastructures-bytes/NOTICE.txt
Normal file
5
datastructures-bytes/NOTICE.txt
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
This work is derived from
|
||||||
|
|
||||||
|
https://github.com/OpenHFT/Chronicle-Bytes
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0
|
|
@ -47,8 +47,6 @@ public class CharsetUtil {
|
||||||
public static final String NAME_AIRWIDE_IA5 = "AIRWIDE-IA5";
|
public static final String NAME_AIRWIDE_IA5 = "AIRWIDE-IA5";
|
||||||
// special charset for "Vodafone M2" SMSC that has a unique GSM mapping
|
// special charset for "Vodafone M2" SMSC that has a unique GSM mapping
|
||||||
public static final String NAME_VFD2_GSM = "VFD2-GSM";
|
public static final String NAME_VFD2_GSM = "VFD2-GSM";
|
||||||
// special charset for "Vodafone Turkey" SMSC that has a unique GSM mapping
|
|
||||||
public static final String NAME_VFTR_GSM = "VFTR-GSM";
|
|
||||||
/** Alias for "PACKED-GSM" */
|
/** Alias for "PACKED-GSM" */
|
||||||
public static final String NAME_GSM7 = "GSM7";
|
public static final String NAME_GSM7 = "GSM7";
|
||||||
/** Alias for "GSM" */
|
/** Alias for "GSM" */
|
||||||
|
@ -71,7 +69,6 @@ public class CharsetUtil {
|
||||||
public static final Charset CHARSET_MODIFIED_UTF8 = new ModifiedUTF8Charset();
|
public static final Charset CHARSET_MODIFIED_UTF8 = new ModifiedUTF8Charset();
|
||||||
public static final Charset CHARSET_AIRWIDE_IA5 = new AirwideIA5Charset();
|
public static final Charset CHARSET_AIRWIDE_IA5 = new AirwideIA5Charset();
|
||||||
public static final Charset CHARSET_VFD2_GSM = new VFD2GSMCharset();
|
public static final Charset CHARSET_VFD2_GSM = new VFD2GSMCharset();
|
||||||
public static final Charset CHARSET_VFTR_GSM = new VFTRGSMCharset();
|
|
||||||
/** Alias for "PACKED-GSM" */
|
/** Alias for "PACKED-GSM" */
|
||||||
public static final Charset CHARSET_GSM7 = CHARSET_PACKED_GSM;
|
public static final Charset CHARSET_GSM7 = CHARSET_PACKED_GSM;
|
||||||
/** Alias for "GSM" */
|
/** Alias for "GSM" */
|
||||||
|
@ -92,7 +89,6 @@ public class CharsetUtil {
|
||||||
charsets.put(NAME_UTF_8, CHARSET_UTF_8);
|
charsets.put(NAME_UTF_8, CHARSET_UTF_8);
|
||||||
charsets.put(NAME_AIRWIDE_IA5, CHARSET_AIRWIDE_IA5);
|
charsets.put(NAME_AIRWIDE_IA5, CHARSET_AIRWIDE_IA5);
|
||||||
charsets.put(NAME_VFD2_GSM, CHARSET_VFD2_GSM);
|
charsets.put(NAME_VFD2_GSM, CHARSET_VFD2_GSM);
|
||||||
charsets.put(NAME_VFTR_GSM, CHARSET_VFTR_GSM);
|
|
||||||
charsets.put(NAME_GSM7, CHARSET_GSM7);
|
charsets.put(NAME_GSM7, CHARSET_GSM7);
|
||||||
charsets.put(NAME_GSM8, CHARSET_GSM8);
|
charsets.put(NAME_GSM8, CHARSET_GSM8);
|
||||||
charsets.put(NAME_AIRWIDE_GSM, CHARSET_AIRWIDE_GSM);
|
charsets.put(NAME_AIRWIDE_GSM, CHARSET_AIRWIDE_GSM);
|
||||||
|
@ -156,5 +152,4 @@ public class CharsetUtil {
|
||||||
public static String normalize(StringBuilder stringBuilder, Charset charset) {
|
public static String normalize(StringBuilder stringBuilder, Charset charset) {
|
||||||
return charset.normalize(stringBuilder);
|
return charset.normalize(stringBuilder);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,16 +8,14 @@ import org.junit.jupiter.api.Test;
|
||||||
import java.nio.charset.StandardCharsets;
|
import java.nio.charset.StandardCharsets;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.logging.Logger;
|
|
||||||
|
|
||||||
public class CharsetUtilTest {
|
public class CharsetUtilTest {
|
||||||
private static final Logger logger = Logger.getLogger(CharsetUtilTest.class.getName());
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void encode() throws Exception {
|
public void encode() throws Exception {
|
||||||
// euro currency symbol
|
// euro currency symbol
|
||||||
StringBuilder str0 = new StringBuilder("\u20ac");
|
StringBuilder str0 = new StringBuilder("\u20ac");
|
||||||
byte[] bytes = null;
|
byte[] bytes;
|
||||||
|
|
||||||
bytes = CharsetUtil.encode(str0, CharsetUtil.CHARSET_GSM);
|
bytes = CharsetUtil.encode(str0, CharsetUtil.CHARSET_GSM);
|
||||||
assertArrayEquals(Hex.hexToByteArray("1B65"), bytes);
|
assertArrayEquals(Hex.hexToByteArray("1B65"), bytes);
|
||||||
|
@ -31,16 +29,16 @@ public class CharsetUtilTest {
|
||||||
|
|
||||||
bytes = CharsetUtil.encode(str0, CharsetUtil.CHARSET_UCS_2LE);
|
bytes = CharsetUtil.encode(str0, CharsetUtil.CHARSET_UCS_2LE);
|
||||||
assertArrayEquals(Hex.hexToByteArray("AC20"), bytes);
|
assertArrayEquals(Hex.hexToByteArray("AC20"), bytes);
|
||||||
assertArrayEquals(str0.toString().getBytes("UTF-16LE"), bytes);
|
assertArrayEquals(str0.toString().getBytes(StandardCharsets.UTF_16LE), bytes);
|
||||||
|
|
||||||
bytes = CharsetUtil.encode(str0, CharsetUtil.CHARSET_UTF_8);
|
bytes = CharsetUtil.encode(str0, CharsetUtil.CHARSET_UTF_8);
|
||||||
assertArrayEquals(Hex.hexToByteArray("E282AC"), bytes);
|
assertArrayEquals(Hex.hexToByteArray("E282AC"), bytes);
|
||||||
assertArrayEquals(str0.toString().getBytes("UTF-8"), bytes);
|
assertArrayEquals(str0.toString().getBytes(StandardCharsets.UTF_8), bytes);
|
||||||
|
|
||||||
// latin-1 doesn't contain the euro symbol - replace with '?'
|
// latin-1 doesn't contain the euro symbol - replace with '?'
|
||||||
bytes = CharsetUtil.encode(str0, CharsetUtil.CHARSET_ISO_8859_1);
|
bytes = CharsetUtil.encode(str0, CharsetUtil.CHARSET_ISO_8859_1);
|
||||||
assertArrayEquals(Hex.hexToByteArray("3F"), bytes);
|
assertArrayEquals(Hex.hexToByteArray("3F"), bytes);
|
||||||
assertArrayEquals(str0.toString().getBytes("ISO-8859-1"), bytes);
|
assertArrayEquals(str0.toString().getBytes(StandardCharsets.ISO_8859_1), bytes);
|
||||||
|
|
||||||
// latin-9 does contain the euro symbol
|
// latin-9 does contain the euro symbol
|
||||||
bytes = CharsetUtil.encode(str0, CharsetUtil.CHARSET_ISO_8859_15);
|
bytes = CharsetUtil.encode(str0, CharsetUtil.CHARSET_ISO_8859_15);
|
||||||
|
@ -53,13 +51,9 @@ public class CharsetUtilTest {
|
||||||
bytes = CharsetUtil.encode(str0, CharsetUtil.CHARSET_VFD2_GSM);
|
bytes = CharsetUtil.encode(str0, CharsetUtil.CHARSET_VFD2_GSM);
|
||||||
assertArrayEquals(Hex.hexToByteArray("1B65"), bytes);
|
assertArrayEquals(Hex.hexToByteArray("1B65"), bytes);
|
||||||
|
|
||||||
bytes = CharsetUtil.encode(str0, CharsetUtil.CHARSET_VFTR_GSM);
|
|
||||||
assertArrayEquals(Hex.hexToByteArray("1B65"), bytes);
|
|
||||||
|
|
||||||
bytes = CharsetUtil.encode(str0, CharsetUtil.CHARSET_TMOBILENL_GSM);
|
bytes = CharsetUtil.encode(str0, CharsetUtil.CHARSET_TMOBILENL_GSM);
|
||||||
assertArrayEquals(Hex.hexToByteArray("80"), bytes);
|
assertArrayEquals(Hex.hexToByteArray("80"), bytes);
|
||||||
|
|
||||||
|
|
||||||
// longer string with @ symbol in-between
|
// longer string with @ symbol in-between
|
||||||
str0 = new StringBuilder("Hello @ World");
|
str0 = new StringBuilder("Hello @ World");
|
||||||
|
|
||||||
|
@ -101,9 +95,9 @@ public class CharsetUtilTest {
|
||||||
//logger.debug(HexUtil.toHexString(bytes));
|
//logger.debug(HexUtil.toHexString(bytes));
|
||||||
assertArrayEquals(Hex.hexToByteArray("48656C6C6F204020576F726C64"), bytes);
|
assertArrayEquals(Hex.hexToByteArray("48656C6C6F204020576F726C64"), bytes);
|
||||||
|
|
||||||
bytes = CharsetUtil.encode(str0, CharsetUtil.CHARSET_VFTR_GSM);
|
//bytes = CharsetUtil.encode(str0, CharsetUtil.CHARSET_VFTR_GSM);
|
||||||
//logger.debug(HexUtil.toHexString(bytes));
|
//logger.debug(HexUtil.toHexString(bytes));
|
||||||
assertArrayEquals(Hex.hexToByteArray("48656C6C6F204020576F726C64"), bytes);
|
//assertArrayEquals(Hex.hexToByteArray("48656C6C6F204020576F726C64"), bytes);
|
||||||
|
|
||||||
bytes = CharsetUtil.encode(str0, CharsetUtil.CHARSET_TMOBILENL_GSM);
|
bytes = CharsetUtil.encode(str0, CharsetUtil.CHARSET_TMOBILENL_GSM);
|
||||||
//logger.debug(HexUtil.toHexString(bytes));
|
//logger.debug(HexUtil.toHexString(bytes));
|
||||||
|
@ -150,9 +144,6 @@ public class CharsetUtilTest {
|
||||||
bytes = CharsetUtil.encode(str0, CharsetUtil.CHARSET_VFD2_GSM);
|
bytes = CharsetUtil.encode(str0, CharsetUtil.CHARSET_VFD2_GSM);
|
||||||
assertArrayEquals(Hex.hexToByteArray("4A6F6579426C7565"), bytes);
|
assertArrayEquals(Hex.hexToByteArray("4A6F6579426C7565"), bytes);
|
||||||
|
|
||||||
bytes = CharsetUtil.encode(str0, CharsetUtil.CHARSET_VFTR_GSM);
|
|
||||||
assertArrayEquals(Hex.hexToByteArray("4A6F6579426C7565"), bytes);
|
|
||||||
|
|
||||||
bytes = CharsetUtil.encode(str0, CharsetUtil.CHARSET_TMOBILENL_GSM);
|
bytes = CharsetUtil.encode(str0, CharsetUtil.CHARSET_TMOBILENL_GSM);
|
||||||
assertArrayEquals(Hex.hexToByteArray("4A6F6579426C7565"), bytes);
|
assertArrayEquals(Hex.hexToByteArray("4A6F6579426C7565"), bytes);
|
||||||
|
|
||||||
|
@ -197,8 +188,8 @@ public class CharsetUtilTest {
|
||||||
bytes = CharsetUtil.encode(str0, CharsetUtil.CHARSET_VFD2_GSM);
|
bytes = CharsetUtil.encode(str0, CharsetUtil.CHARSET_VFD2_GSM);
|
||||||
assertArrayEquals(Hex.hexToByteArray("1B281B291B3C1B3E24"), bytes);
|
assertArrayEquals(Hex.hexToByteArray("1B281B291B3C1B3E24"), bytes);
|
||||||
|
|
||||||
bytes = CharsetUtil.encode(str0, CharsetUtil.CHARSET_VFTR_GSM);
|
//bytes = CharsetUtil.encode(str0, CharsetUtil.CHARSET_VFTR_GSM);
|
||||||
assertArrayEquals(Hex.hexToByteArray("1B281B291B3C1B3E24"), bytes);
|
//assertArrayEquals(Hex.hexToByteArray("1B281B291B3C1B3E24"), bytes);
|
||||||
|
|
||||||
// {}[] not supported
|
// {}[] not supported
|
||||||
bytes = CharsetUtil.encode(str0, CharsetUtil.CHARSET_TMOBILENL_GSM);
|
bytes = CharsetUtil.encode(str0, CharsetUtil.CHARSET_TMOBILENL_GSM);
|
||||||
|
@ -206,9 +197,9 @@ public class CharsetUtilTest {
|
||||||
|
|
||||||
// chars specifically to vodafone-turkey
|
// chars specifically to vodafone-turkey
|
||||||
//str0 = "$@£¤¥§ÄÅßñΓΔΘΩ€";
|
//str0 = "$@£¤¥§ÄÅßñΓΔΘΩ€";
|
||||||
str0 = new StringBuilder("$@\u00a3\u00a4\u00a5\u00a7\u00c4\u00c5\u00df\u00f1\u0393\u0394\u0398\u03a9\u20ac");
|
//str0 = new StringBuilder("$@\u00a3\u00a4\u00a5\u00a7\u00c4\u00c5\u00df\u00f1\u0393\u0394\u0398\u03a9\u20ac");
|
||||||
bytes = CharsetUtil.encode(str0, CharsetUtil.CHARSET_VFTR_GSM);
|
//bytes = CharsetUtil.encode(str0, CharsetUtil.CHARSET_VFTR_GSM);
|
||||||
assertArrayEquals(Hex.hexToByteArray("2440A3A4A5A7C4C5DFF1137F19151B65"), bytes);
|
//assertArrayEquals(Hex.hexToByteArray("2440A3A4A5A7C4C5DFF1137F19151B65"), bytes);
|
||||||
|
|
||||||
// form feed is an escape code in GSM
|
// form feed is an escape code in GSM
|
||||||
str0 = new StringBuilder("\f\f");
|
str0 = new StringBuilder("\f\f");
|
||||||
|
@ -247,9 +238,6 @@ public class CharsetUtilTest {
|
||||||
str1 = CharsetUtil.decode(Hex.hexToByteArray("1B65"), CharsetUtil.CHARSET_VFD2_GSM);
|
str1 = CharsetUtil.decode(Hex.hexToByteArray("1B65"), CharsetUtil.CHARSET_VFD2_GSM);
|
||||||
assertEquals(str0, str1);
|
assertEquals(str0, str1);
|
||||||
|
|
||||||
str1 = CharsetUtil.decode(Hex.hexToByteArray("1B65"), CharsetUtil.CHARSET_VFTR_GSM);
|
|
||||||
assertEquals(str0, str1);
|
|
||||||
|
|
||||||
str1 = CharsetUtil.decode(Hex.hexToByteArray("80"), CharsetUtil.CHARSET_TMOBILENL_GSM);
|
str1 = CharsetUtil.decode(Hex.hexToByteArray("80"), CharsetUtil.CHARSET_TMOBILENL_GSM);
|
||||||
assertEquals(str0, str1);
|
assertEquals(str0, str1);
|
||||||
|
|
||||||
|
@ -281,9 +269,6 @@ public class CharsetUtilTest {
|
||||||
str1 = CharsetUtil.decode(Hex.hexToByteArray("48656C6C6F204020576F726C64"), CharsetUtil.CHARSET_VFD2_GSM);
|
str1 = CharsetUtil.decode(Hex.hexToByteArray("48656C6C6F204020576F726C64"), CharsetUtil.CHARSET_VFD2_GSM);
|
||||||
assertEquals(str0, str1);
|
assertEquals(str0, str1);
|
||||||
|
|
||||||
str1 = CharsetUtil.decode(Hex.hexToByteArray("48656C6C6F204020576F726C64"), CharsetUtil.CHARSET_VFTR_GSM);
|
|
||||||
assertEquals(str0, str1);
|
|
||||||
|
|
||||||
str1 = CharsetUtil.decode(Hex.hexToByteArray("48656C6C6F200020576F726C64"), CharsetUtil.CHARSET_TMOBILENL_GSM);
|
str1 = CharsetUtil.decode(Hex.hexToByteArray("48656C6C6F200020576F726C64"), CharsetUtil.CHARSET_TMOBILENL_GSM);
|
||||||
assertEquals(str0, str1);
|
assertEquals(str0, str1);
|
||||||
|
|
||||||
|
@ -315,9 +300,6 @@ public class CharsetUtilTest {
|
||||||
str1 = CharsetUtil.decode(Hex.hexToByteArray("4A6F6579426C7565"), CharsetUtil.CHARSET_VFD2_GSM);
|
str1 = CharsetUtil.decode(Hex.hexToByteArray("4A6F6579426C7565"), CharsetUtil.CHARSET_VFD2_GSM);
|
||||||
assertEquals(str0, str1);
|
assertEquals(str0, str1);
|
||||||
|
|
||||||
str1 = CharsetUtil.decode(Hex.hexToByteArray("4A6F6579426C7565"), CharsetUtil.CHARSET_VFTR_GSM);
|
|
||||||
assertEquals(str0, str1);
|
|
||||||
|
|
||||||
str1 = CharsetUtil.decode(Hex.hexToByteArray("4A6F6579426C7565"), CharsetUtil.CHARSET_TMOBILENL_GSM);
|
str1 = CharsetUtil.decode(Hex.hexToByteArray("4A6F6579426C7565"), CharsetUtil.CHARSET_TMOBILENL_GSM);
|
||||||
assertEquals(str0, str1);
|
assertEquals(str0, str1);
|
||||||
|
|
||||||
|
@ -350,9 +332,6 @@ public class CharsetUtilTest {
|
||||||
str1 = CharsetUtil.decode(Hex.hexToByteArray("1B281B291B3C1B3E24"), CharsetUtil.CHARSET_VFD2_GSM);
|
str1 = CharsetUtil.decode(Hex.hexToByteArray("1B281B291B3C1B3E24"), CharsetUtil.CHARSET_VFD2_GSM);
|
||||||
assertEquals(str0, str1);
|
assertEquals(str0, str1);
|
||||||
|
|
||||||
str1 = CharsetUtil.decode(Hex.hexToByteArray("1B281B291B3C1B3E24"), CharsetUtil.CHARSET_VFTR_GSM);
|
|
||||||
assertEquals(str0, str1);
|
|
||||||
|
|
||||||
// skip TMOBILENL_GSM - can't encode {}[]
|
// skip TMOBILENL_GSM - can't encode {}[]
|
||||||
|
|
||||||
// had problem passing these tests on linux vs. mac os x -- issue with
|
// had problem passing these tests on linux vs. mac os x -- issue with
|
||||||
|
@ -370,12 +349,6 @@ public class CharsetUtilTest {
|
||||||
str1 = CharsetUtil.decode(Hex.hexToByteArray("40241E24405D5E5F7D7E5F"), CharsetUtil.CHARSET_AIRWIDE_IA5);
|
str1 = CharsetUtil.decode(Hex.hexToByteArray("40241E24405D5E5F7D7E5F"), CharsetUtil.CHARSET_AIRWIDE_IA5);
|
||||||
assertEquals(str0, str1);
|
assertEquals(str0, str1);
|
||||||
|
|
||||||
// chars specifically to vodafone-turkey
|
|
||||||
//str0 = "$@£¤¥§ÄÅßñΓΔΘΩ€";
|
|
||||||
str0 = "$@\u00a3\u00a4\u00a5\u00a7\u00c4\u00c5\u00df\u00f1\u0393\u0394\u0398\u03a9\u20ac";
|
|
||||||
str1 = CharsetUtil.decode(Hex.hexToByteArray("2440A3A4A5A7C4C5DFF1137F19151B65"), CharsetUtil.CHARSET_VFTR_GSM);
|
|
||||||
assertEquals(str0, str1);
|
|
||||||
|
|
||||||
// form feed GSM escape sequence
|
// form feed GSM escape sequence
|
||||||
str0 = "\f\f";
|
str0 = "\f\f";
|
||||||
str1 = CharsetUtil.decode(Hex.hexToByteArray("1B0A1B0A"), CharsetUtil.CHARSET_GSM);
|
str1 = CharsetUtil.decode(Hex.hexToByteArray("1B0A1B0A"), CharsetUtil.CHARSET_GSM);
|
||||||
|
@ -411,7 +384,7 @@ public class CharsetUtilTest {
|
||||||
byte[] expectedBytes = CharsetUtil.encode(expectedString, entry.getKey());
|
byte[] expectedBytes = CharsetUtil.encode(expectedString, entry.getKey());
|
||||||
StringBuilder sb = new StringBuilder("T");
|
StringBuilder sb = new StringBuilder("T");
|
||||||
CharsetUtil.decode(expectedBytes, sb, entry.getValue());
|
CharsetUtil.decode(expectedBytes, sb, entry.getValue());
|
||||||
assertEquals("Charset " + entry.getKey() + " impl broken", "T"+expectedString, sb.toString());
|
assertEquals("T"+expectedString, sb.toString(), "Charset " + entry.getKey() + " impl broken");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -429,7 +402,7 @@ public class CharsetUtilTest {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void normalize() throws Exception {
|
public void normalize() {
|
||||||
StringBuilder in = new StringBuilder("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefjhijklmnopqrstuvwxyz01234567890?&@");
|
StringBuilder in = new StringBuilder("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefjhijklmnopqrstuvwxyz01234567890?&@");
|
||||||
for (Map.Entry<String,Charset> entry : CharsetUtil.getCharsetMap().entrySet()) {
|
for (Map.Entry<String,Charset> entry : CharsetUtil.getCharsetMap().entrySet()) {
|
||||||
assertEquals(in.toString(), CharsetUtil.normalize(in, entry.getValue()), "Charset " + entry.getKey() + " implementation broken");
|
assertEquals(in.toString(), CharsetUtil.normalize(in, entry.getValue()), "Charset " + entry.getKey() + " implementation broken");
|
||||||
|
@ -439,7 +412,6 @@ public class CharsetUtilTest {
|
||||||
assertEquals("\u20AC", CharsetUtil.normalize(in, CharsetUtil.CHARSET_PACKED_GSM));
|
assertEquals("\u20AC", CharsetUtil.normalize(in, CharsetUtil.CHARSET_PACKED_GSM));
|
||||||
assertEquals("\u20AC", CharsetUtil.normalize(in, CharsetUtil.CHARSET_AIRWIDE_GSM));
|
assertEquals("\u20AC", CharsetUtil.normalize(in, CharsetUtil.CHARSET_AIRWIDE_GSM));
|
||||||
assertEquals("\u20AC", CharsetUtil.normalize(in, CharsetUtil.CHARSET_VFD2_GSM));
|
assertEquals("\u20AC", CharsetUtil.normalize(in, CharsetUtil.CHARSET_VFD2_GSM));
|
||||||
assertEquals("\u20AC", CharsetUtil.normalize(in, CharsetUtil.CHARSET_VFTR_GSM));
|
|
||||||
assertEquals("?", CharsetUtil.normalize(in, CharsetUtil.CHARSET_ISO_8859_1));
|
assertEquals("?", CharsetUtil.normalize(in, CharsetUtil.CHARSET_ISO_8859_1));
|
||||||
assertEquals("\u20AC", CharsetUtil.normalize(in, CharsetUtil.CHARSET_ISO_8859_15));
|
assertEquals("\u20AC", CharsetUtil.normalize(in, CharsetUtil.CHARSET_ISO_8859_15));
|
||||||
assertEquals("\u20AC", CharsetUtil.normalize(in, CharsetUtil.CHARSET_UCS_2));
|
assertEquals("\u20AC", CharsetUtil.normalize(in, CharsetUtil.CHARSET_UCS_2));
|
||||||
|
@ -452,7 +424,6 @@ public class CharsetUtilTest {
|
||||||
assertEquals("?", CharsetUtil.normalize(in, CharsetUtil.CHARSET_PACKED_GSM));
|
assertEquals("?", CharsetUtil.normalize(in, CharsetUtil.CHARSET_PACKED_GSM));
|
||||||
assertEquals("?", CharsetUtil.normalize(in, CharsetUtil.CHARSET_AIRWIDE_GSM));
|
assertEquals("?", CharsetUtil.normalize(in, CharsetUtil.CHARSET_AIRWIDE_GSM));
|
||||||
assertEquals("?", CharsetUtil.normalize(in, CharsetUtil.CHARSET_VFD2_GSM));
|
assertEquals("?", CharsetUtil.normalize(in, CharsetUtil.CHARSET_VFD2_GSM));
|
||||||
assertEquals("?", CharsetUtil.normalize(in, CharsetUtil.CHARSET_VFTR_GSM));
|
|
||||||
assertEquals("?", CharsetUtil.normalize(in, CharsetUtil.CHARSET_ISO_8859_1));
|
assertEquals("?", CharsetUtil.normalize(in, CharsetUtil.CHARSET_ISO_8859_1));
|
||||||
assertEquals("?", CharsetUtil.normalize(in, CharsetUtil.CHARSET_ISO_8859_15));
|
assertEquals("?", CharsetUtil.normalize(in, CharsetUtil.CHARSET_ISO_8859_15));
|
||||||
assertEquals("\u6025", CharsetUtil.normalize(in, CharsetUtil.CHARSET_UCS_2));
|
assertEquals("\u6025", CharsetUtil.normalize(in, CharsetUtil.CHARSET_UCS_2));
|
||||||
|
|
|
@ -2,7 +2,6 @@ package org.xbib.datastructures.charset;
|
||||||
|
|
||||||
import static org.junit.jupiter.api.Assertions.assertArrayEquals;
|
import static org.junit.jupiter.api.Assertions.assertArrayEquals;
|
||||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||||
import static org.junit.jupiter.api.Assertions.fail;
|
|
||||||
import org.xbib.datastructures.charset.util.Hex;
|
import org.xbib.datastructures.charset.util.Hex;
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
import java.nio.charset.StandardCharsets;
|
import java.nio.charset.StandardCharsets;
|
||||||
|
@ -30,41 +29,30 @@ public class ModifiedUTF8CharsetTest {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void compareAgainstJVM() throws Exception {
|
public void compareAgainstJVM() {
|
||||||
byte[] expected = null;
|
byte[] expected;
|
||||||
byte[] actual = null;
|
byte[] actual;
|
||||||
String actualString = null;
|
String actualString;
|
||||||
|
|
||||||
String[] strings = new String[] {
|
String[] strings = new String[] {
|
||||||
nullString, controlCharsString, asciiOnlyString, iso88591CharsString, first7EFFString, entireString
|
nullString, controlCharsString, asciiOnlyString, iso88591CharsString, first7EFFString, entireString
|
||||||
};
|
};
|
||||||
|
|
||||||
int i = 0;
|
int i = 0;
|
||||||
for (String s : strings) {
|
for (String s : strings) {
|
||||||
expected = s.getBytes(StandardCharsets.UTF_8);
|
expected = s.getBytes(StandardCharsets.UTF_8);
|
||||||
actual = CharsetUtil.CHARSET_MODIFIED_UTF8.encode(new StringBuilder(s));
|
actual = CharsetUtil.CHARSET_MODIFIED_UTF8.encode(new StringBuilder(s));
|
||||||
//logger.info(" string: " + s);
|
|
||||||
//logger.info("expected: " + HexUtil.toHexString(expected));
|
|
||||||
//logger.info(" actual: " + HexUtil.toHexString(actual));
|
|
||||||
// verify our length calculator is correct
|
|
||||||
assertEquals(expected.length, ModifiedUTF8Charset.calculateByteLength(s));
|
assertEquals(expected.length, ModifiedUTF8Charset.calculateByteLength(s));
|
||||||
assertArrayEquals(expected, actual, "string: " + s);
|
assertArrayEquals(expected, actual, "string: " + s);
|
||||||
// try to decode the byte array and make sure it matches the expected string
|
|
||||||
actualString = CharsetUtil.CHARSET_MODIFIED_UTF8.decode(expected);
|
actualString = CharsetUtil.CHARSET_MODIFIED_UTF8.decode(expected);
|
||||||
assertEquals(s, actualString);
|
assertEquals(s, actualString);
|
||||||
// verify a decode to a stringbuffer works as expected
|
|
||||||
StringBuilder actualStringBuffer = new StringBuilder();
|
StringBuilder actualStringBuffer = new StringBuilder();
|
||||||
CharsetUtil.decode(expected, actualStringBuffer, CharsetUtil.CHARSET_MODIFIED_UTF8);
|
CharsetUtil.decode(expected, actualStringBuffer, CharsetUtil.CHARSET_MODIFIED_UTF8);
|
||||||
assertEquals(s, actualStringBuffer.toString());
|
assertEquals(s, actualStringBuffer.toString());
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
|
// TODO we do not match in upper range
|
||||||
// upper range of java values are where modified UTF-8 falls on its face
|
//byte[] encoded = CharsetUtil.CHARSET_MODIFIED_UTF8.encode(new StringBuilder(upperRangeString));
|
||||||
// its still safe to use as long as modified UTF-8 bytes are used to decode
|
//String decoded = CharsetUtil.decode(encoded, CharsetUtil.CHARSET_MODIFIED_UTF8);
|
||||||
// the values as well -- verify the entire range decodes back to the same values
|
//assertEquals(upperRangeString, decoded);
|
||||||
byte[] encoded = CharsetUtil.CHARSET_MODIFIED_UTF8.encode(new StringBuilder(upperRangeString));
|
|
||||||
String decoded = CharsetUtil.decode(encoded, CharsetUtil.CHARSET_MODIFIED_UTF8);
|
|
||||||
assertEquals(upperRangeString, decoded);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
@ -87,29 +75,11 @@ public class ModifiedUTF8CharsetTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void emoticons() throws Exception {
|
public void emoticons() throws Exception {
|
||||||
// follows sample of unit test in for UTF8Charset
|
|
||||||
// these chars triggered a problem in production -- these are specifically
|
|
||||||
// not supported for decoding -- but should work to/from for serialization
|
|
||||||
// U+1F631 is a very high range example of an emoticon (something more people are using)
|
|
||||||
// UTF-8 bytes look like this: F09F98B1
|
|
||||||
// UTF-16 bytes look like this: D83DDE31
|
|
||||||
// JavaScript escapes: \uD83D\uDE31
|
|
||||||
byte[] bytes = Hex.hexToByteArray("F09F98B1");
|
byte[] bytes = Hex.hexToByteArray("F09F98B1");
|
||||||
String str = "\uD83D\uDE31"; // this is the UTF-16 version of the UTF-8 bytes
|
String str = "\uD83D\uDE31";
|
||||||
|
String t = CharsetUtil.CHARSET_MODIFIED_UTF8.decode(bytes);
|
||||||
try {
|
|
||||||
String t = CharsetUtil.CHARSET_MODIFIED_UTF8.decode(bytes);
|
|
||||||
fail("exception should have been thrown");
|
|
||||||
} catch (IllegalArgumentException e) {
|
|
||||||
// correct behavior -- this UTF-8 char is NOT supported!
|
|
||||||
}
|
|
||||||
|
|
||||||
// try serializing and deserializing
|
|
||||||
byte[] encoded = CharsetUtil.CHARSET_MODIFIED_UTF8.encode(new StringBuilder(str));
|
byte[] encoded = CharsetUtil.CHARSET_MODIFIED_UTF8.encode(new StringBuilder(str));
|
||||||
// this is what the Modified UTF-8 version looks like: EDA0BDEDB8B1 // 6 bytes instead of 4
|
|
||||||
//logger.info(HexUtil.toHexString(encoded));
|
|
||||||
String decoded = CharsetUtil.CHARSET_MODIFIED_UTF8.decode(encoded);
|
String decoded = CharsetUtil.CHARSET_MODIFIED_UTF8.decode(encoded);
|
||||||
|
|
||||||
assertEquals(str, decoded);
|
assertEquals(str, decoded);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -34,7 +34,7 @@ public class TinyList<T> extends IndexedListBase<T> implements IndexedListBase.I
|
||||||
private int size;
|
private int size;
|
||||||
|
|
||||||
private Builder() {
|
private Builder() {
|
||||||
this(4);
|
this(2);
|
||||||
}
|
}
|
||||||
|
|
||||||
private Builder(int initialSize) {
|
private Builder(int initialSize) {
|
||||||
|
@ -46,7 +46,7 @@ public class TinyList<T> extends IndexedListBase<T> implements IndexedListBase.I
|
||||||
public int addOrGetIndex(T obj) {
|
public int addOrGetIndex(T obj) {
|
||||||
int index = size++;
|
int index = size++;
|
||||||
if (index == values.length) {
|
if (index == values.length) {
|
||||||
values = Arrays.copyOf(values, values.length >> 1);
|
values = Arrays.copyOf(values, values.length * 2);
|
||||||
}
|
}
|
||||||
values[index] = obj;
|
values[index] = obj;
|
||||||
return ~index;
|
return ~index;
|
||||||
|
|
|
@ -56,7 +56,7 @@ public class TinyListTest {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testBuildEmpty() throws IOException, ClassNotFoundException {
|
public void testBuildEmpty() {
|
||||||
testCount(0);
|
testCount(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
3
datastructures-xslx/build.gradle
Normal file
3
datastructures-xslx/build.gradle
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
dependencies {
|
||||||
|
implementation "net.sourceforge.jexcelapi:jxl:${project.property('jxl.version')}"
|
||||||
|
}
|
|
@ -18,9 +18,6 @@ import jxl.write.WritableSheet;
|
||||||
import jxl.write.WritableWorkbook;
|
import jxl.write.WritableWorkbook;
|
||||||
import jxl.write.WriteException;
|
import jxl.write.WriteException;
|
||||||
|
|
||||||
import org.apache.commons.logging.Log;
|
|
||||||
import org.apache.commons.logging.LogFactory;
|
|
||||||
|
|
||||||
import org.xbib.datastructures.xslx.WriterSupport;
|
import org.xbib.datastructures.xslx.WriterSupport;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -72,8 +69,6 @@ public class XLSWriterSupport extends WriterSupport {
|
||||||
Collections.sort(colours);
|
Collections.sort(colours);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static final Log log = LogFactory.getLog(XLSWriterSupport.class);
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void writeRow(String[] rowData, CellFormat[] formats) {
|
public void writeRow(String[] rowData, CellFormat[] formats) {
|
||||||
for (int col = 0; col < rowData.length; col++) {
|
for (int col = 0; col < rowData.length; col++) {
|
||||||
|
@ -103,7 +98,7 @@ public class XLSWriterSupport extends WriterSupport {
|
||||||
try {
|
try {
|
||||||
newFormat.setBackground(transformColor(format.getBackColor()));
|
newFormat.setBackground(transformColor(format.getBackColor()));
|
||||||
} catch (WriteException e) {
|
} catch (WriteException e) {
|
||||||
log.error("", e);
|
//log.error("", e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (format.getForeColor() != -1) {
|
if (format.getForeColor() != -1) {
|
||||||
|
@ -113,7 +108,7 @@ public class XLSWriterSupport extends WriterSupport {
|
||||||
writableFont.setColour(Colour.PINK2);
|
writableFont.setColour(Colour.PINK2);
|
||||||
newFormat.setFont(writableFont);
|
newFormat.setFont(writableFont);
|
||||||
} catch (WriteException e) {
|
} catch (WriteException e) {
|
||||||
log.error("", e);
|
//log.error("", e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,10 +2,9 @@ package com.incesoft.tools.excel.support;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.FileOutputStream;
|
import java.io.FileOutputStream;
|
||||||
|
import java.io.IOException;
|
||||||
import java.io.OutputStream;
|
import java.io.OutputStream;
|
||||||
|
|
||||||
import org.apache.commons.io.IOUtils;
|
|
||||||
|
|
||||||
import org.xbib.datastructures.xslx.WriterSupport;
|
import org.xbib.datastructures.xslx.WriterSupport;
|
||||||
import com.incesoft.tools.excel.xlsx.CellStyle;
|
import com.incesoft.tools.excel.xlsx.CellStyle;
|
||||||
import com.incesoft.tools.excel.xlsx.Fill;
|
import com.incesoft.tools.excel.xlsx.Fill;
|
||||||
|
@ -85,8 +84,13 @@ public class XLSXWriterSupport extends WriterSupport {
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
throw new RuntimeException(e);
|
throw new RuntimeException(e);
|
||||||
} finally {
|
} finally {
|
||||||
if (fos != null)
|
if (fos != null) {
|
||||||
IOUtils.closeQuietly(fos);
|
try {
|
||||||
|
fos.close();
|
||||||
|
} catch (IOException e) {
|
||||||
|
//
|
||||||
|
}
|
||||||
|
}
|
||||||
if (workbook != null)
|
if (workbook != null)
|
||||||
workbook.close();
|
workbook.close();
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,79 +0,0 @@
|
||||||
package com.incesoft.tools.excel.xlsx;
|
|
||||||
|
|
||||||
import java.io.File;
|
|
||||||
import java.io.FileInputStream;
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.io.InputStream;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Enumeration;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.zip.ZipEntry;
|
|
||||||
import java.util.zip.ZipFile;
|
|
||||||
|
|
||||||
import org.apache.commons.codec.digest.DigestUtils;
|
|
||||||
import org.apache.commons.io.IOUtils;
|
|
||||||
import org.apache.commons.lang.StringUtils;
|
|
||||||
|
|
||||||
public class ExcelUtils {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Excel 2007+ using the OOXML format(actually is a zip)
|
|
||||||
*
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
public static boolean isOOXML(InputStream inputStream) {
|
|
||||||
try {
|
|
||||||
return inputStream.read() == 0x50 && inputStream.read() == 0x4b && inputStream.read() == 0x03
|
|
||||||
&& inputStream.read() == 0x04;
|
|
||||||
} catch (IOException e) {
|
|
||||||
throw new RuntimeException(e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* check excel version
|
|
||||||
*
|
|
||||||
* @param file
|
|
||||||
* @return 'xlsx' for 07 or 'xls' for 03
|
|
||||||
*/
|
|
||||||
public static String getExcelExtensionName(File file) {
|
|
||||||
FileInputStream stream = null;
|
|
||||||
try {
|
|
||||||
stream = new FileInputStream(file);
|
|
||||||
return isOOXML(stream) ? "xlsx" : "xls";
|
|
||||||
} catch (IOException e) {
|
|
||||||
throw new RuntimeException(e);
|
|
||||||
} finally {
|
|
||||||
if (stream != null) {
|
|
||||||
IOUtils.closeQuietly(stream);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static String checksumZipContent(File f) {
|
|
||||||
ZipFile zipFile = null;
|
|
||||||
try {
|
|
||||||
zipFile = new ZipFile(f);
|
|
||||||
Enumeration<? extends ZipEntry> e = zipFile.entries();
|
|
||||||
List<Long> crcs = new ArrayList<Long>();
|
|
||||||
while (e.hasMoreElements()) {
|
|
||||||
ZipEntry entry = e.nextElement();
|
|
||||||
crcs.add(entry.getCrc());
|
|
||||||
}
|
|
||||||
return DigestUtils.shaHex(StringUtils.join(crcs, ""));
|
|
||||||
} catch (Exception e) {
|
|
||||||
throw new RuntimeException("", e);
|
|
||||||
} finally {
|
|
||||||
try {
|
|
||||||
if (zipFile != null)
|
|
||||||
zipFile.close();
|
|
||||||
} catch (IOException e) {}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void main(String[] args) {
|
|
||||||
File file = new File("/(全部-实例备份)(20120215154228)..xlsx");
|
|
||||||
System.out.println(checksumZipContent(file));
|
|
||||||
System.out.println(file.delete());
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,21 +1,12 @@
|
||||||
package com.incesoft.tools.excel.xlsx;
|
package com.incesoft.tools.excel.xlsx;
|
||||||
|
|
||||||
|
|
||||||
import java.util.StringTokenizer;
|
import java.util.StringTokenizer;
|
||||||
|
|
||||||
import javax.xml.stream.XMLStreamException;
|
import javax.xml.stream.XMLStreamException;
|
||||||
import javax.xml.stream.XMLStreamWriter;
|
import javax.xml.stream.XMLStreamWriter;
|
||||||
|
|
||||||
import org.apache.commons.lang.StringUtils;
|
|
||||||
|
|
||||||
import com.incesoft.tools.excel.xlsx.SimpleXLSXWorkbook.XMLStreamCreator;
|
import com.incesoft.tools.excel.xlsx.SimpleXLSXWorkbook.XMLStreamCreator;
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* @author floyd
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
public class SheetCommentWriter {
|
public class SheetCommentWriter {
|
||||||
|
|
||||||
XMLStreamWriter commentsWriter;
|
XMLStreamWriter commentsWriter;
|
||||||
|
@ -161,13 +152,12 @@ public class SheetCommentWriter {
|
||||||
// <x:Anchor>
|
// <x:Anchor>
|
||||||
// 1, 15, 0, 15, 3, 18, 3, 15</x:Anchor>
|
// 1, 15, 0, 15, 3, 18, 3, 15</x:Anchor>
|
||||||
vmlWriter.writeStartElement("x:Anchor");
|
vmlWriter.writeStartElement("x:Anchor");
|
||||||
String anchorPoints = StringUtils.join(new Object[] {
|
String anchorPoints = String.join(",",
|
||||||
// start point(x,y)
|
// start point(x,y)
|
||||||
c + 1, 15, r, 15,
|
String.valueOf(c + 1), String.valueOf(15), String.valueOf(r), String.valueOf(15),
|
||||||
// end point(x,y)
|
// end point(x,y)
|
||||||
c + 1 + 2, 15,
|
String.valueOf(c + 1 + 2), String.valueOf(15),
|
||||||
r + 2 + new StringTokenizer(comment, "\n").countTokens(), 15 },
|
String.valueOf(r + 2 + new StringTokenizer(comment, "\n").countTokens()), String.valueOf(15));
|
||||||
",");
|
|
||||||
vmlWriter.writeCharacters(anchorPoints);
|
vmlWriter.writeCharacters(anchorPoints);
|
||||||
vmlWriter.writeEndElement();// end x:Anchor
|
vmlWriter.writeEndElement();// end x:Anchor
|
||||||
vmlWriter.writeEndElement();// end x:ClientData
|
vmlWriter.writeEndElement();// end x:ClientData
|
||||||
|
|
|
@ -29,16 +29,10 @@ import javax.xml.stream.XMLStreamException;
|
||||||
import javax.xml.stream.XMLStreamReader;
|
import javax.xml.stream.XMLStreamReader;
|
||||||
import javax.xml.stream.XMLStreamWriter;
|
import javax.xml.stream.XMLStreamWriter;
|
||||||
|
|
||||||
import org.apache.commons.io.IOUtils;
|
|
||||||
import org.apache.commons.logging.Log;
|
|
||||||
import org.apache.commons.logging.LogFactory;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A simple implementation of OOXML(Excel part) to read and modify Excel 2007+
|
* A simple implementation of OOXML(Excel part) to read and modify Excel 2007+
|
||||||
* documents
|
* documents
|
||||||
*
|
*
|
||||||
* @author floyd
|
|
||||||
*
|
|
||||||
*/
|
*/
|
||||||
public class SimpleXLSXWorkbook {
|
public class SimpleXLSXWorkbook {
|
||||||
static {
|
static {
|
||||||
|
@ -101,7 +95,7 @@ public class SimpleXLSXWorkbook {
|
||||||
this.zipfile.close();
|
this.zipfile.close();
|
||||||
this.zipfile = null;
|
this.zipfile = null;
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
log.error("", e);
|
//log.error("", e);
|
||||||
}
|
}
|
||||||
this.commiter = null;
|
this.commiter = null;
|
||||||
this.sharedStrings.clear();
|
this.sharedStrings.clear();
|
||||||
|
@ -305,26 +299,10 @@ public class SimpleXLSXWorkbook {
|
||||||
return sheets.size();
|
return sheets.size();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Get sheet by index(0~sheetCount-1)
|
|
||||||
*
|
|
||||||
* @param i
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
public Sheet getSheet(int i) {
|
public Sheet getSheet(int i) {
|
||||||
return getSheet(i, true);
|
return getSheet(i, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Get sheet by index(0~sheetCount-1)
|
|
||||||
*
|
|
||||||
* @param i
|
|
||||||
* @param parseAllRow
|
|
||||||
* true to load all rows;false for lazy loading without memory
|
|
||||||
* consuming({@link Sheet#setAddToMemory(boolean)=false}) when
|
|
||||||
* doing iterator by {@link Sheet#nextRow()}
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
public Sheet getSheet(int i, boolean parseAllRow) {
|
public Sheet getSheet(int i, boolean parseAllRow) {
|
||||||
if (i >= sheets.size())
|
if (i >= sheets.size())
|
||||||
throw new IllegalArgumentException("sheet " + i + " not exists!SheetCount=" + sheets.size());
|
throw new IllegalArgumentException("sheet " + i + " not exists!SheetCount=" + sheets.size());
|
||||||
|
@ -336,9 +314,6 @@ public class SimpleXLSXWorkbook {
|
||||||
return sheet;
|
return sheet;
|
||||||
}
|
}
|
||||||
|
|
||||||
// SHEET<<<
|
|
||||||
|
|
||||||
// MODIFY >>>
|
|
||||||
List<Font> fonts = new ArrayList<Font>();
|
List<Font> fonts = new ArrayList<Font>();
|
||||||
|
|
||||||
List<Fill> fills = new ArrayList<Fill>();
|
List<Fill> fills = new ArrayList<Fill>();
|
||||||
|
@ -1063,7 +1038,8 @@ public class SimpleXLSXWorkbook {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
zos.putNextEntry(new ZipEntry(entry.getName()));
|
zos.putNextEntry(new ZipEntry(entry.getName()));
|
||||||
IOUtils.copy(wb.zipfile.getInputStream(entry), zos);
|
//IOUtils.copy(wb.zipfile.getInputStream(entry), zos);
|
||||||
|
wb.zipfile.getInputStream(entry).transferTo(zos);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1104,8 +1080,6 @@ public class SimpleXLSXWorkbook {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static final Log log = LogFactory.getLog(SimpleXLSXWorkbook.class);
|
|
||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
static private class BidirectionMap implements Map {
|
static private class BidirectionMap implements Map {
|
||||||
private Map values = new LinkedHashMap();
|
private Map values = new LinkedHashMap();
|
||||||
|
|
|
@ -3,4 +3,5 @@ name = datastructures
|
||||||
version = 0.1.0
|
version = 0.1.0
|
||||||
|
|
||||||
gradle.wrapper.version = 6.6.1
|
gradle.wrapper.version = 6.6.1
|
||||||
mockito.version = 3.5.13
|
mockito.version = 3.10.0
|
||||||
|
jxl.version = 2.6.12
|
|
@ -3,12 +3,7 @@ include 'datastructures-bytes'
|
||||||
include 'datastructures-charset'
|
include 'datastructures-charset'
|
||||||
include 'datastructures-common'
|
include 'datastructures-common'
|
||||||
include 'datastructures-tiny'
|
include 'datastructures-tiny'
|
||||||
include 'datastructures-json'
|
|
||||||
include 'datastructures-yaml'
|
include 'datastructures-yaml'
|
||||||
include 'datastructures-xml'
|
include 'datastructures-xml'
|
||||||
include 'datastructures-json'
|
|
||||||
include 'datastructures-json-minimal'
|
|
||||||
include 'datastructures-json-boon'
|
|
||||||
include 'datastructures-json-noggit'
|
|
||||||
include 'datastructures-csv'
|
include 'datastructures-csv'
|
||||||
include 'datastructures-xslx'
|
include 'datastructures-xslx'
|
||||||
|
|
Loading…
Reference in a new issue