Машинный код является двоичным (1's и 0) код, который может быть выполнен непосредственно ЦП. Если бы необходимо было открыть файл машинного кода в текстовом редакторе, то Вы видели бы мусор, включая непечатные символы (не, не те непечатные символы;)).
Объектный код является частью машинного кода, который еще не был связан в полную программу. Это - машинный код для одной конкретной библиотеки или модуля, который составит завершенный продукт. Это может также содержать заполнителей или смещения, не найденные в машинном коде завершенной программы. компоновщик будет использовать этих заполнителей и смещения для соединения всего вместе.
Ассемблерный код является простым текстом и (несколько) человеческим читаемым исходным кодом, который главным образом имеет прямое 1:1 аналог с машинными командами. Это выполняется с помощью мнемоники для фактических инструкций, регистров или других ресурсов. Примеры включают JMP
и MULT
для инструкций по переходу и умножению ЦП. В отличие от машинного кода, ЦП не понимает ассемблерный код. Вы преобразовываете ассемблерный код в машину с использованием ассемблер или компилятор , хотя мы обычно думаем о компиляторах в сотрудничестве с высокоуровневым языком программирования, которые абстрагированы далее из инструкций по ЦП.
Здание полная программа включает запись исходный код для программы или в блоке или в высокоуровневом языке как C++. Исходный код собран (для ассемблерного кода) или скомпилирован (для высокоуровневых языков) к объектному коду, и отдельные модули соединены для становления машинным кодом для заключительной программы. В случае очень простых программ не может быть необходим связывающийся шаг. В других случаях такой как с IDE (интегрированная среда разработки) компоновщик и компилятор могут быть вызваны вместе. В других случаях сложное делает сценарий или , файл решения может использоваться для сообщения среды, как создать заключительное приложение.
существуют также интерпретируемые языки , которые ведут себя по-другому. Интерпретируемые языки полагаются на машинный код специальной программы интерпретатора. На базовом уровне интерпретатор анализирует исходный код и сразу преобразовывает команды в новый машинный код и выполняет их. Современные интерпретаторы, иногда также названные среда выполнения или виртуальная машина , намного более сложны: оценка целых разделов исходного кода за один раз, кэширования и оптимизации, если это возможно, и справления со сложными задачами управления памятью. Интерпретируемый язык может также быть предварительно скомпилирован в промежуточный язык низшего уровня или байт-код, подобный ассемблерному коду.
Чрезвычайно распространенной ошибкой является невозможность правильно преобразовать HTTP-ответ из байты в символы. Для этого вам необходимо знать кодировку символов в ответе. Надеюсь, это указано как параметр в параметре Content-Type. Но размещение его в самом теле в качестве атрибута http-Equiv в теге meta
также является вариантом.
Таким образом, загрузить страницу в String на удивление сложно.
правильно, и даже сторонние библиотеки, такие как HttpClient, не предлагают общего решения.
Вот простая реализация, которая будет обрабатывать наиболее распространенный случай:
URL url = new URL("http://stackoverflow.com/questions/1381617");
URLConnection con = url.openConnection();
Pattern p = Pattern.compile("text/html;\\s+charset=([^\\s]+)\\s*");
Matcher m = p.matcher(con.getContentType());
/* If Content-Type doesn't match this pre-conception, choose default and
* hope for the best. */
String charset = m.matches() ? m.group(1) : "ISO-8859-1";
Reader r = new InputStreamReader(con.getInputStream(), charset);
StringBuilder buf = new StringBuilder();
while (true) {
int ch = r.read();
if (ch < 0)
break;
buf.append((char) ch);
}
String str = buf.toString();
Я использую это:
BufferedReader bufferedReader = new BufferedReader(
new InputStreamReader(
new URL(urlToSeach)
.openConnection()
.getInputStream() ));
StringBuilder sb = new StringBuilder();
String line = null;
while( ( line = bufferedReader.readLine() ) != null ) {
sb.append( line ) ;
sb.append( "\n");
}
.... in finally....
buffer.close();
Он работает в большинстве случаев.
Вы все еще можете немного упростить его, используя org.apache.commons.io.IOUtils
:
URL url = new URL("http://stackoverflow.com/questions/1381617");
URLConnection con = url.openConnection();
Pattern p = Pattern.compile("text/html;\\s+charset=([^\\s]+)\\s*");
Matcher m = p.matcher(con.getContentType());
/* If Content-Type doesn't match this pre-conception, choose default and
* hope for the best. */
String charset = m.matches() ? m.group(1) : "ISO-8859-1";
String str = IOUtils.toString(con.getInputStream(), charset);