Используя ответы Ника и Барбары, вот пример кода со статистикой производительности для 1000000 циклов на моей машине:
input = "shmB6BhLe0gdGU8OxYykZ21vuxLjBo5I1ZTJjxWfyRTTlqQlgz0yUtPu8iNCCcsx78EPsObiPkCpRT8nqRtvM3Bku1f9nStmigaw";
input.Replace('\u2013', '-'); // en dash
input.Replace('\u2014', '-'); // em dash
input.Replace('\u2015', '-'); // horizontal bar
input.Replace('\u2017', '_'); // double low line
input.Replace('\u2018', '\''); // left single quotation mark
input.Replace('\u2019', '\''); // right single quotation mark
input.Replace('\u201a', ','); // single low-9 quotation mark
input.Replace('\u201b', '\''); // single high-reversed-9 quotation mark
input.Replace('\u201c', '\"'); // left double quotation mark
input.Replace('\u201d', '\"'); // right double quotation mark
input.Replace('\u201e', '\"'); // double low-9 quotation mark
input.Replace("\u2026", "..."); // horizontal ellipsis
input.Replace('\u2032', '\''); // prime
input.Replace('\u2033', '\"'); // double prime
Время: 958,1011 миллисекунд
input = "shmB6BhLe0gdGU8OxYykZ21vuxLjBo5I1ZTJjxWfyRTTlqQlgz0yUtPu8iNCCcsx78EPsObiPkCpRT8nqRtvM3Bku1f9nStmigaw";
var inputArray = input.ToCharArray();
for (int i = 0; i < inputArray.Length; i++)
{
switch (inputArray[i])
{
case '\u2013':
inputArray[i] = '-';
break;
// en dash
case '\u2014':
inputArray[i] = '-';
break;
// em dash
case '\u2015':
inputArray[i] = '-';
break;
// horizontal bar
case '\u2017':
inputArray[i] = '_';
break;
// double low line
case '\u2018':
inputArray[i] = '\'';
break;
// left single quotation mark
case '\u2019':
inputArray[i] = '\'';
break;
// right single quotation mark
case '\u201a':
inputArray[i] = ',';
break;
// single low-9 quotation mark
case '\u201b':
inputArray[i] = '\'';
break;
// single high-reversed-9 quotation mark
case '\u201c':
inputArray[i] = '\"';
break;
// left double quotation mark
case '\u201d':
inputArray[i] = '\"';
break;
// right double quotation mark
case '\u201e':
inputArray[i] = '\"';
break;
// double low-9 quotation mark
case '\u2026':
inputArray[i] = '.';
break;
// horizontal ellipsis
case '\u2032':
inputArray[i] = '\'';
break;
// prime
case '\u2033':
inputArray[i] = '\"';
break;
// double prime
}
}
input = new string(inputArray);
Время: 362,0858 миллисекунд
Если вы используете SSH, вы можете разрешить туннелирование и туннелирование порта на ваш локальный хост. Никакой разработки не требуется, все делается с использованием sshd, ssh и / или putty.
Отладочный сокет на вашем Java-сервере можно настроить на локальном интерфейсе 127.0.0.1.
Вы абсолютно правы: API отладки Java по своей сути небезопасен. Однако вы можете ограничить его сокетами домена UNIX и написать прокси с SSL / SSH, чтобы вы могли аутентифицировать и зашифровывать внешние соединения, которые затем проксируются в сокет домена UNIX. Это, по крайней мере, уменьшает вашу доступность к тому, кто может передать процесс на сервер, или кому-то, кто может взломать ваш SSL.
Экспорт информации / служб в JMX, а затем использование RMI + SSL для удаленного доступа. JMX предназначен для вашей ситуации (M означает Management).
Хороший вопрос.
Я не знаю ни одной встроенной возможности шифровать соединения с портом отладки.
Может быть гораздо лучшее / более простое решение, но я будет делать следующее: