Вот некоторый злой код, который Вы могли бы найти интересным. :D
public enum YesNo {YES, NO}
public static void main(String... args) throws Exception {
Field field = Unsafe.class.getDeclaredField("theUnsafe");
field.setAccessible(true);
Unsafe unsafe = (Unsafe) field.get(null);
YesNo yesNo = (YesNo) unsafe.allocateInstance(YesNo.class);
Field name = Enum.class.getDeclaredField("name");
name.setAccessible(true);
name.set(yesNo, "YES");
Field ordinal = Enum.class.getDeclaredField("ordinal");
ordinal.setAccessible(true);
ordinal.set(yesNo, 0);
System.out.println("yesNo " + yesNo);
System.out.println("YesNo.YES.name().equals(yesNo.name()) "+YesNo.YES.name().equals(yesNo.name()));
System.out.println("YesNo.YES.ordinal() == yesNo.ordinal() "+(YesNo.YES.ordinal() == yesNo.ordinal()));
System.out.println("YesNo.YES.equals(yesNo) "+YesNo.YES.equals(yesNo));
System.out.println("YesNo.YES == yesNo " + (YesNo.YES == yesNo));
}
Чтобы исправить это, необходимо выполнить TrimEnd (new char [] {(char) 0});
. Это не пробелы - это на самом деле странным образом преобразованные нулевые символы. У меня тоже была эта проблема.
На самом деле это не пробелы:
System.Text.Encoding.ASCII.GetString(byteArray).TrimEnd('\0')
... должно помочь.
-Oisin
Обрезка по умолчанию удаляет только пробелы , где пробелы определяются char.IsWhitespace
.
'\ 0'
- это управляющий символ, а не пробел.
Вы можете указать, какие символы обрезать, используя перегрузку Trim (char [])
:
string result = Encoding.ASCII.GetString(data).Trim(new char[] { '\0' });