рдЬрд╛рд╡рд╛ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЧреЛ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдмрд╣реБрдд рдЪрд░реНрдЪрд┐рдд рд╣реБрдЖ рд╣реИред рдЧреЛ рд╡реАрдХ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдПрдХ рдмрд╣реБрдд рд╣реА рджрд┐рд▓рдЪрд╕реНрдк
Dreadd рдкрд░рд┐рдЪрдпрд╛рддреНрдордХ
рд▓реЗрдЦ рд▓реЗрдХрд░ рдЖрдпрд╛, рдФрд░ рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рдХрд┐ рдЬрд╛рд╡рд╛ рдХрд╛рд░реНрдп рдХреЛ рдХреИрд╕реЗ рд╣реИрдВрдбрд▓ рдХрд┐рдпрд╛ рдЬрд╛рдПред
рдЬреИрд╕рд╛ рдХрд┐ рдХреЛрдб рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛, рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЧрдпрд╛ рдХрд┐ рдЬрд╛рд╡рд╛ рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реА рджрд┐рд▓рдЪрд╕реНрдк рдЪреАрдЬреЗрдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдкреНрд░реЗрд╕ рдореЗрдВ рдмрд╣реБрдд рдХрдо рдХрд╡рд░реЗрдЬ рд╣реИред рдореИрдВрдиреЗ рдЬрд╛рд╡рд╛ 7 рд╕реЗ рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рдирд╡рд╛рдЪрд╛рд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рд╢реБрд░реБрдЖрддреА рдФрд░ рдЕрдиреБрднрд╡реА рджреЛрдиреЛрдВ, рд▓реЗрдХрд┐рди рдЖрд▓рд╕реА рдЬрд╛рд╡рд╛ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рдпрд╣рд╛рдВ рдЙрдкрдпреЛрдЧреА рдЬрд╛рдирдХрд╛рд░реА рдорд┐рд▓реЗрдЧреАред
рдХрд╛рд░реНрдп
рд╕рдорд╕реНрдпрд╛ рдХреЛ рдмрд┐рдирд╛ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ рд╣рдо рдЗрд╕реЗ рдореВрд▓ рдХреЗ рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЙрддрдирд╛ рд╣рд▓ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВрдЧреЗред рдЙрд╕реА рддрд░рд╣, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХрдИ рдбреЗрдЯрд╛ рд░реАрдбрд┐рдВрдЧ рд╕реНрдЯреНрд░реАрдо, рдПрдХ рд╕реЗрд╡рд┐рдВрдЧ рд╕реНрдЯреНрд░реАрдо, рдПрдХ рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди рдЯрд╛рдЗрдорд░ рджреНрд╡рд╛рд░рд╛ рдФрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рдмрдВрдж рдХрд░рдХреЗ рд╣реЛрдЧрд╛ред рд╣рдо рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдкрд░ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рд╕реЗ рдкреИрд░рд╛рдореАрдЯрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВрдЧреЗред
рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдореВрд▓ рдХрдерди... рддрддреНрдХрд╛рд▓, рдЕрдВрдзреЗрд░реЗ рдХреЗ рдХрд╡рд░ рдХреЗ рддрд╣рдд, рдЖрдЧреЗ рдХреА рдЧреБрдкреНрдд рд╢реЛрдз рдХреЗ рд▓рд┐рдП рд╕рднреА рдЙрджреНрдзрд░рдгреЛрдВ рдХрд╛ рдПрдХ рдкреВрд░рд╛ рдбрдВрдк рдореЙрдбрд░реЗрд╢рди [ http://vpustotu.ru/moderation/ ] рдкрд░ рдЕрдкрд▓реЛрдб рдХрд░реЗрдВ ...
рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдЖрдкрдХреЛ рдПрдХ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
- рдкреГрд╖реНрда рдХреЛ рд▓рдЧрд╛рддрд╛рд░ рдЕрджреНрдпрддрди рдФрд░ рдкрд╛рд░реНрд╕ (рдкрд╛рд░реНрд╕) рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдПрдХ рдЙрджреНрдзрд░рдг рд▓рд┐рдЦрдХрд░ред
- рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдХреЛ рдЫреЛрдбрд╝рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
- рди рдХреЗрд╡рд▓ рдЖрджреЗрд╢ рдкрд░ рд░реЛрдХрдирд╛ рдЪрд╛рд╣рд┐рдП, рдмрд▓реНрдХрд┐ "рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐" рдХреА рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕рдВрдЦреНрдпрд╛ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдкрд░, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП 500!
- рдЪреВрдВрдХрд┐ рдЗрд╕рдореЗрдВ рдХреБрдЫ рд╕рдордп рд▓рдЧрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ: рдмрдВрдж рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдЖрдкрдХреЛ "рдЬрд╣рд╛рдБ рд╕реЗ рдЖрдкрдиреЗ рдЫреЛрдбрд╝рд╛ рдерд╛" рдЬрд╛рд░реА рд░рдЦрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
- рдЦреИрд░, рдЪреВрдВрдХрд┐ рдЕрднреА рднреА рдПрдХ рд▓рдВрдмрд╛ рд╕рдордп рд╣реИ - рдЗрд╕реЗ рдХрдИ рдзрд╛рд░рд╛рдУрдВ рдореЗрдВ рдЕрдкрдирд╛ рдЧрдВрджрд╛ рдХрд╛рдо рдХрд░рдиреЗ рджреЗрдВред рдареАрдХ рд╣реИ, рдпрд╣ 4 рдереНрд░реЗрдбреНрд╕ (рдпрд╛ 5) рдХреЗ рд░реВрдк рдореЗрдВ рдХрдИ рдореЗрдВ рд╣реЛрдЧрд╛ред
- рдФрд░ рд╣рд░ рд╕реЗрдХрдВрдб, рдХрд╣рддреЗ рд╣реИрдВ, 10 рд╕реЗрдХрдВрдб рдХреЗ рд▓рд┐рдП рд╕рдлрд▓рддрд╛рдУрдВ рдкрд░ рд░рд┐рдкреЛрд░реНрдЯред
- рдФрд░ рдЙрдиреНрд╣реЗрдВ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдХреЗ рддрд░реНрдХреЛрдВ рд╕реЗ рдЗрди рд╕рднреА рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рджреЗрдВ!
рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рд╡рд┐рдХрд▓реНрдк
рдЖрдЗрдП рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рдЬреИрд╕рд╛ рдХрд┐ рдореВрд▓ рд▓реЗрдЦ рдореЗрдВ, рд╢реБрд░реБрдЖрдд рд╕реЗ, рдЕрд░реНрдерд╛рддреНред рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рд╕рд╛рдеред рдЬрд╛рд╡рд╛ рдореЗрдВ рдЗрди рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рд░ рд╕реНрд╡рд╛рдж рдХреЗ рд▓рд┐рдП рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИрдВред рдореБрдЭреЗ jcommander рдкрд╕рдВрдж рд╣реИред рд╕рдорд╛рдзрд╛рди, рдЬреИрд╕рд╛ рдХрд┐ рд╡реЗ рдХрд╣рддреЗ рд╣реИрдВ, "рдЬрд╛рд╡рд╛ рд░рд╛рд╕реНрддрд╛" рд╣реИред
private static class CommandLine { @Parameter(names = "-h", help = true) boolean help; @Parameter(names = "-w", description = " ") int workers = 2; @Parameter(names = "-r", description = " ()") int reportPeriod = 10; @Parameter(names = "-d", description = "- ") int dupToStop = 500; @Parameter(names = "-hf", description = " ") String hashFile = "hash.bin"; @Parameter(names = "-qf", description = " ") String quotesFile = "quotes.txt"; } ... CommandLine commandLine = new CommandLine();
рдЙрд╕реА рдкрд░ рдЪрд▓рддреЗ рд╣реИрдВ рдХрд┐рд╕реА рднреА рдХреЛрдб рдХреЗ рдПрдиреЛрдЯреЗрд╢рди рдмреЗрд╣рддрд░ рдХрд░рддреЗ рд╣реИрдВред
рдЪреИрдирд▓реЛрдВ
рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рдЪреИрдирд▓реЛрдВ рдХреЛ рдЙрджреНрдзрд░рдг рдкреНрд░реЗрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рдПрдВ, рдЬрд╛рд╡рд╛ рдореЗрдВ рд╣рдо рдирд┐рдХрдЯрддрдо рдПрдирд╛рд▓реЙрдЧ рд▓реЗрддреЗ рд╣реИрдВ, рдмреНрд▓реЙрдХрд┐рдВрдЧ рдХреНрдпреВ:
BlockingQueue<String> queue = new ArrayBlockingQueue<>(10);
рд╣рдо рдПрдХ рд╣реА рд╕реВрддреНрд░ рдореЗрдВ рдХрдИ рдХрддрд╛рд░реЛрдВ рд╕реЗ рдирд╣реАрдВ рдкрдврд╝ рдкрд╛рдПрдВрдЧреЗред рд▓реЗрдХрд┐рди рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЕрдиреНрдп рдЙрдкрд╣рд╛рд░ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдо рдХрддрд╛рд░ рдХреА рд▓рдВрдмрд╛рдИ рдХреЛ рд╕реАрдорд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрджрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЗрд╕реЗ рдЦрд╛рд▓реА рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рдирд╣реАрдВ рд╣реИред
рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЧреЛрд░реБрдЯрд┐рди рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд░рдирдиреЗрдмрд▓ рд╣реИред рдмреЗрд╢рдХ, рдПрдХ рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд╕реНрддреБ рдмрдирд╛рдирд╛ рдЕрдкреНрд░рд┐рдп рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕рд┐рджреНрдзрд╛рдВрдд рдХрд╛ рд╡рд┐рд╖рдп рд╣реИред
new Thread(new Grabber()).start();
рд╣рд╛рдВ, рдХрд╛рдлреА рдХреНрд░рд┐рдпрд╛рддреНрдордХ рд╣реИ, рдЖрдк рдмрд╣рд╕ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕реАрдорд╛ рдирд╣реАрдВ рд╣реИред
Thread worker = new Thread(new Grabber()); worker.setPriority(2); worker.setDaemon(true); worker.start();
рдЕрдм рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрд░рд┐рдпрд╛ред рд▓реЗрдХрд┐рди рдпрд╣ рдЕрддрд┐рд░рд┐рдХреНрдд рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╢реБрд▓реНрдХ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рд╕реНрдЯреНрд░реАрдо рдХреА рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХрд╛ рд╕рдВрдХреЗрддред
HTML рдкрд╛рд░реНрд╕рд┐рдВрдЧ
рдХрд╣рд╛ рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рдХреЗ рд░реВрдк рдореЗрдВ, рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдмреЗрд╣рддрд░ рд╣реИред
public class Grabber implements Runnable{ ... public void run() { try { while (true) {
рдЙрд╕реА рдкрд░ рдЪрд▓рддреЗ рд╣реИрдВ рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рд╡рд┐рдзрд┐ рдХреА рд╕рд╛рдордЧреНрд░реА рд╕рдорд╛рди рд╣реИрдВред HTML рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рдмрд╛рд╣рд░реА рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ jsoupред рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд╕реНрд╡рд┐рдВрдЧ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рд╕рдм рдХреБрдЫ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред
рдмреЛрдЭрд┐рд▓ рдЕрдкрд╡рд╛рдж рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рд╡рд╛ рдХреЗ рд▓рд┐рдП рдХрдИ рдкреНрд░рд╕рд╛рд░ рд╕рдбрд╝рд╛рдВрдз, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рд▓рд┐рдП рдЧреЛ рдореЗрдВ == рдиреАрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕рд┐рд░реНрдл рднрдпрд╛рдирдХ рд╣реИред рдФрд░ рдЬрд╛рд╡рд╛ рдореЗрдВ, рдЖрдк рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рд╕реЗ рдЗрдВрдХрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдХрд░реЗрдВрдЧреЗред
рдлрд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВ
рдлрд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рднреА рдХрд╛рдлреА рд╕рдорд╛рди рд╣реИред рдореИрдВ Java7 рдХреА рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирдП рдЧреИрд░-рдЕрд╡рд░реЛрдзрдХ рд╡рд░реНрдЧреЛрдВ рдкрд░ рдзреНрдпрд╛рди рдЖрдХрд░реНрд╖рд┐рдд рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛ред рдЖрдк рдЗрд╕реЗ java.nio рд╕реЗ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╣ рдкреНрд░рдпреЛрдЧ рдЧреЛ рдореЗрдВ рдореМрдЬреВрдж рдЕрдкрдиреЗ рд╕рдордХрдХреНрд╖ рдХреЗ рд╕рдорд╛рди рд╣реИред
рдЙрд╕реА рдкрд░ рдЪрд▓рддреЗ рд╣реИрдВ рдЬрд╛рд╡рд╛ рдореЗрдВ, рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рд╡рд╛рджрд╛ рдХрд┐рдпрд╛ рдерд╛, рдЖрдк рд╕реНрдкрд╖реНрдЯ рддреНрд░реБрдЯрд┐ рд╣реИрдВрдбрд▓рд┐рдВрдЧ рд╕реЗ рдЗрдирдХрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
public static void main(String[] args) throws IOException
рдХреЛрд╢рд┐рд╢ рд╕рдВрд╕рд╛рдзрди
рдЧреЛ рдореЗрдВ рдбреЗрдлрд░ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкрд╕рдВрдж рдЖрдпрд╛, рдЬрд┐рд╕рдиреЗ рдЕрдВрдд рдореЗрдВ рд╕реНрдЯреНрд░реАрдо рдХреЛ рдмрдВрдж рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рд╕рд░рд╛рд╣рдирд╛ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдПред рд▓реЗрдХрд┐рди рд╕реМрднрд╛рдЧреНрдп рд╕реЗ рд╣рдо рдмрдЪ рдЬрд╛рддреЗ рд╣реИрдВ, рдФрд░ рдЬрд╛рд╡рд╛ 7 рдореЗрдВ рдПрдХ рдХреЛрд╢рд┐рд╢-рд╕рдВрд╕рд╛рдзрди рдирд┐рд░реНрдорд╛рдг рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред
try ( OutputStream hashFile = Files.newOutputStream(Paths.get(commandLine.hashFile), CREATE, APPEND, WRITE); InputStream hashStream = Files.newInputStream(Paths.get(commandLine.hashFile)); BufferedWriter quotesFile = Files.newBufferedWriter(Paths.get(commandLine.quotesFile), Charset.forName("UTF8"), CREATE, APPEND, WRITE);) { ... }
рдХреЛрд╖реНрдардХ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╡рд╕реНрддреБрдУрдВ рдХреЛ java.lang.AutoCloseable рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдФрд░ рд╡реЗ рдХреЛрд╢рд┐рд╢ рдмреНрд▓реЙрдХ рдХреЗ рдЕрдВрдд рдореЗрдВ рдмрдВрдж рд╣реЛ рдЬрд╛рдПрдВрдЧреЗред рд╣рд╛рдБ, рдпрд╣ рдПрдХ рдмреИрд╕рд╛рдЦреА рдХреА рддрд░рд╣ рдмрд╣реБрдд рджрд┐рдЦрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдбреЗрдлрд░ рд╕реЗ рдХрдо рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдирд╣реАрдВ рд╣реИред
рд╣реИрд╢ рдХрдореНрдкреЗрд░рд┐рдЬрди
рдЕрд▓рдЧ-рдЕрд▓рдЧ, рдЖрдк рдмрд╛рдЗрдЯ рд╕рд░рдгреА рдХреЗ рдЕрдиреБрд╡рд╛рдж рдкрд░ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рдзреНрдпрд╛рди рджреЗ рд╕рдХрддреЗ рд╣реИрдВред
Hex.encodeHexString(hash);
рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рдРрд╕реА рдХреЛрдИ рд╡рд┐рдзрд┐ рдирд╣реАрдВ рд╣реИ, рдореВрд▓ рдХреЗ рд╕рд╛рде рдкрд╣рдЪрд╛рди рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдПрдкрд╛рдЪреЗ рдХреЙрдордиреНрд╕ рдХреЛрдбреЗрдХ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред рд▓реЗрдХрд┐рди рдЖрдк рд╕реНрд╡рдпрдВ рдПрдХ рд╡рд┐рдзрд┐ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВред
static String encodeHexString(byte[] a) { StringBuilder sb = new StringBuilder(); for (byte b : a) sb.append(String.format("%02x", b & 0xff)); return sb.toString(); }
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣рд╛рдВ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рд╕реЗ рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рд╣реИ рдХрд┐ рдмрд╛рдЗрдЯреНрд╕ рдХреЗ рд╕рд░рдгреА рдХреЛ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣ рдпреВрдЯреАрдПрдл -16 рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
new String(hash, "UTF16");
рдФрд░ рдЖрдк рдмрд┐рд▓реНрдХреБрд▓ рднреА рдХреЛрдб рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рд╕рд░рдгрд┐рдпреЛрдВ рдХреА рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рддреБрд▓рдирд┐рддреНрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдПред
static Set<byte[]> hashes = new TreeSet<>(new Comparator<byte[]>() { public int compare(byte[] a1, byte[] a2) { int result = a1.length - a2.length; if (result == 0){ for (int i = 0; i < a1.length; i++){ result = a1[i] - a2[i]; if (result != 0) break; } } return result; }; });
рд╕рд╣рд╛рдпрдХ рдзрд╛рд░рд╛рдПрдБ
рдореБрдЦреНрдп рдзрд╛рдЧрд╛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЙрджреНрдзрд░рдгреЛрдВ рдХреА рдПрдХ рдХрддрд╛рд░ рджреНрд╡рд╛рд░рд╛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдЕрд▓рд░реНрдЯ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдкреНрд░рд╡рд╛рд╣ рдореЗрдВ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕ рдмрд┐рдВрджреБ рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд, рдХреЛрдб рдореЗрдВ рд▓рдЧрднрдЧ рдХреЛрдИ рдЕрдВрддрд░ рдирд╣реАрдВ рд╣реИрдВред
рд╢реВрд▓рдбрд╛рдЙрди рд╣реВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдорд╛рдкрди рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреА рдЬрд╛рдПрдЧреАред
Runtime.getRuntime().addShutdownHook(new Thread() { public void run() { System.out.printf(" . : " + hashes.size()); } });
рд╕реНрд╡рд┐рдВрдЧ рд╕реЗ рдЯрд╛рдЗрдорд░ рд▓реЗрдВред
new Timer(commandLine.reportPeriod * 1000, new ActionListener() { @Override public void actionPerformed(ActionEvent arg0) { System.out.printf(" %d / %d (%d /) \n", hashes.size(), dupCount, quotesCount/commandLine.reportPeriod); quotesCount = 0; } }).start();
рдбреБрдкреНтАНрдХрд╛рдЙрдВрдЯ рдФрд░ рдХреЛрдЯреНрд╕ рдХреЛ рдПрдХреНтАНрд╕реЗрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдиреНтАНрд╣реЗрдВ рд╡рд┐рдзрд┐ рд╕реЗ рд╡рд░реНрдЧреАрдп рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдореЗрдВ рдирд┐рдХрд╛рд▓рдирд╛ рдЬрд░реВрд░реА рдерд╛, рд▓реЗрдХрд┐рди рдЗрд╕рд╕реЗ рдЙрдирдХреЗ рд╕рд╛рде рдХрд╛рдо рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рд╣реБрдЖред
рдкреВрд░реНрдг рдХреЛрдб рдпрд╣рд╛рдВ рдЦреЛрдЬреЗрдВ:
http://pastebin.com/pLLVxTXZрдирд┐рд╖реНрдХрд░реНрд╖
рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ, рд▓рд╛рдЗрдиреЛрдВ рдореЗрдВ рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреА рдорд╛рддреНрд░рд╛ рд▓рдЧрднрдЧ рд╕рдорд╛рди рдереАред рдореЗрд░реА рд░рд╛рдп рдореЗрдВ рдкрдардиреАрдпрддрд╛ рднреА рд╕рдорд╛рди рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдЖрдХрд▓рди рдХреЗрд╡рд▓ рдмрд╛рд╣рд░ рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдПрдХ рднрд╛рд╖рд╛ рдореЗрдВ, рдХреБрдЫ рдФрд░ рдЖрд╕рд╛рдиреА рд╕реЗ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рджреВрд╕рд░реЗ рдореЗрдВ рдпрд╣ рдЕрд▓рдЧ рд╣реИ, рдФрд░ рдореИрдВ рдХрд┐рд╕реА рднреА рднрд╛рд╖рд╛ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЙрдЬрд╛рдЧрд░ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рдХрд╛рдлреА рдЫреЛрдЯрд╛ рдкреНрд░рд╡реЗрд╢-рд╕реНрддрд░ рдХрд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╣реИ, рдФрд░ рдпрд╣ рдмрдбрд╝реЗ рдкреИрдорд╛рдиреЗ рдХреЗ рдПрдВрдЯрд░рдкреНрд░рд╛рдЗрдЬрд╝ рд╕рдорд╛рдзрд╛рдиреЛрдВ рдореЗрдВ рднрд╛рд╖рд╛рдУрдВ рдФрд░ рджреГрд╖реНрдЯрд┐рдХреЛрдгреЛрдВ рдХреА рддреБрд▓рдирд╛ рдХрд░рдирд╛ рджрд┐рд▓рдЪрд╕реНрдк рд╣реЛрдЧрд╛ред
рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред