да, я был в состоянии записать основной синтаксический анализатор, базирующийся от этого rfc и некоторые другие основные учебные руководства. но это - вложенные границы многослойной пантомимы, которые продолжают портить меня.
я узнал, что MMS (не SMS) сообщения, отправленные от моего телефона, являются просто стандартными электронными письмами, таким образом, у меня есть система, которая читает входящую электронную почту, проверяет от (чтобы только позволить с моего телефона) и использует часть тела для выполнения различных команд на моем сервере. его вид подобных дистанционное управление по электронной почте.
, потому что система разработана для отправки изображений, его полученный набор по-другому закодированных частей. часть mms.smil.txt, текст/плоскость (то, которое бесполезно, просто говорит 'это, является сообщением HTML'), application/smil часть (который часть, которая телефоны были бы рис. на), текст/HTML расстаются с рекламой для моего поставщика услуг, тогда моим сообщением, но все перенеслись в HTML, тогда наконец вложение текстового файла с моим сообщением открытым текстом (который является использованием первой части) (если я пихаю изображение как вложение в сообщении, его помещенном во вложение 1, base64 закодированный, тогда моя текстовая часть присоединяется как вложение 2)
у меня был он работающий с точным почтовым форматом от моего поставщика услуг, но когда я выполнил сообщение от кого-то телефон elses через него, это перестало работать в целом наборе скудных путей.
у меня есть другие проекты, к которым я хотел бы расширить этот телефон-> почта-> синтаксический анализ-> система команд, но у меня должен быть стабильный/твердый/универсальный синтаксический анализатор для вытаскивания различных частей из почты для использования его.
моя конечная цель должна была бы иметь функцию, что я мог подать сырые данные переданная по каналу почта в и возвратить большой массив с ассоциативными подмассивами заголовков var:val пары, и один для основного текста в целом представляют в виде строки
, чем все больше я ищу на этом, тем больше я нахожу то же самое: гигант чрезмерно развил почтовые пакеты обработки, которые делают все под солнцем, это связано с письмами или бесполезное (мне, в этом проекте) учебные руководства.
я думаю, что оказываюсь перед необходимостью стиснуть зубы и просто тщательно записать что-то мой сам.
Integer.numberOfLeadingZeros (i) + 1
В этом методе используется прекрасный подход «разделяй и властвуй», скопированный здесь для вашего обзора:
public static int numberOfLeadingZeros(int i) {
// HD, Figure 5-6
if (i == 0)
return 32;
int n = 1;
if (i >>> 16 == 0) { n += 16; i <<= 16; }
if (i >>> 24 == 0) { n += 8; i <<= 8; }
if (i >>> 28 == 0) { n += 4; i <<= 4; }
if (i >>> 30 == 0) { n += 2; i <<= 2; }
n -= i >>> 31;
return n;
}
Страница " Bit Twiddling Hacks " содержит множество битовых хаков. Один из них - как найти индекс бита высшего порядка .
Я не знаю, как выполнить команду ЦП, но знаю, что это будет намного быстрее, если развернуть цикл и использовать явную маскировку битов.
Кроме того, символ не 8 бит ... Думаю, вы имели в виду байт.
Понятия не имею, быстрее ли это. Но у него нет цикла.
if(i==0) return -1;
highest=0;
if (i & 0xffff0000)
{
highest+=16;
i>>=16;
}
if (i & 0xff00)
{
highest+=8;
i>>=8;
}
if (i & 0xf0)
{
highest+=4;
i>>=4;
}
if (i & 0xC)
{
highest+=2;
i>>=2;
}
if (i & 0x2)
{
highest+=1;
}
return highest;
Насколько я могу судить, Pentium и друзья не имеют готовой инструкции для этого. Поэтому нужно использовать приличный алгоритм.
Ключ к быстрому получению ответа - использовать двоичный поиск. Вы смотрите на длинный
с 64 битами? 6 сравнений каждый раз дадут вам наивысший бит.
Код работает с большим уродливым деревом из 64 операторов if, но только часть из них будет когда-либо выполнена, так что время выполнения хорошее.
Если вы нужен образец кода, я могу это сделать. Но я бы не стал.
Java компилируется в независимый от платформы байт-код, поэтому вы не можете ожидать поддержки инструкций ЦП. В противном случае ваш код или Integer.highestOneBit () должен быть максимально быстрым.